【问题标题】:Setting security-settings for MQTT in Artemis在 Artemis 中为 MQTT 设置安全设置
【发布时间】:2019-11-20 08:21:35
【问题描述】:

我正在尝试控制 Artemis 用户可以将哪些主题与 MQTT 一起使用。我有 Artemis 工作,可以使用:match="#" 发送/收听 MQTT 主题,但如果我尝试将某些主题的匹配限制为:match="userA.#"(类似于文档中的大多数示例)我无法发送和接收任何消息。

我进入管理控制台,看到我保留的主题 userA/test 得到了地址 $sys.mqtt.retain.userA.test,所以我尝试为匹配添加前缀,但这也不起作用。

所以我的问题是:你可以使用security-settings 限制 MQTT 主题访问吗?如果可以,你会怎么做?

有没有更好的方法,例如使用/编写 SimpleMQTTInterceptor?

【问题讨论】:

    标签: mqtt activemq-artemis


    【解决方案1】:

    我认为这里的问题是 match 与主题名称的语法。你的匹配是userA.#,但你的主题是userA/test。请注意,. 不等于 /。尝试将您的配置更改为:

    <wildcard-addresses>
       <delimiter>/</delimiter>
    </wildcard-addresses>
    

    然后将匹配更改为userA/#

    通配符语法配置在the documentation中讨论。

    【讨论】:

    • 我认为代理足够聪明,可以为每个协议翻译它,否则你不能真正在代理上同时使用多个协议?无论如何,我试过了,但我仍然无法发送或收听匹配的子主题。您碰巧没有 mqtt 的工作示例吗?
    • 在代理支持的所有协议中,MQTT 是唯一具有这种特定语法的协议。您当然可以同时使用多个协议,它们只需要对其目的地使用相同的语法。我目前没有任何具有安全性的 MQTT 示例。
    • 我在 Artemis 测试套件中设置了一个测试,一切看起来都像预期的那样工作。您也许可以分叉和修改 Artemis 附带的 MQTT publish-subscribe example 以展示您所看到的。
    • 感谢帮助!我没有让它工作的真正问题是这个文档link,它将角色格式声明为 user=roles 而不是 role=users 应该是。还是谢谢。
    • 您是在谈论PropertiesLoginModule 的文档吗?如果是这样,文档明确指出,“artemis-roles.properties 文件包含表单属性列表Role=UserList,其中UserList 是逗号分隔的用户列表。”此外,您链接的文档适用于 ActiveMQ Artemis 1.2.0,它现在已经很旧了。最新版本是 2.11.0。这些文档是here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2013-11-12
    • 2017-06-23
    相关资源
    最近更新 更多