mqtt - 地址 test/signal/abc 上的用户 : Bob does not have permission ='CREATE_DURABLE_QUEUE' for queue bob. test/test/signal/abc

标签 mqtt paho activemq-artemis

我已经配置了 ActiveMQ Artemis broker.xml 文件,以便一个用户 (Alice) 将使用 MQTT 协议(protocol)在 Artemis 中创建地址/队列。 Alice 的角色配置为可以创建地址/队列/发送/消费

另一个用户 (Bob) 将仅使用/发送该队列中的消息。 Bob 的角色被配置为只能从主题发送和使用。

但是,我在执行以下操作时遇到了以下异常:

  1. 使用 Alice 发布主题
  2. 使用 Bob 订阅同一主题

执行以下操作时也会遇到相同的异常:

  1. 使用 Alice 订阅主题
  2. 使用 Bob 订阅同一主题
Error processing Control Packet, Disconnecting Client: ActiveMQSecurityException[errorType=SECURITY_EXCEPTION message=AMQ229213: User: bob123 does not have permission='CREATE_DURABLE_QUEUE' for queue bob.test/test/signal/abc on address test/signal/abc]

broker.xml:

<security-settings>
   <security-setting match="test/signal/#">
      <permission roles="amq,alice-user" type="createDurableQueue"/>
      <permission roles="amq,alice-user" type="deleteDurableQueue"/>
      <permission roles="amq,alice-user" type="createAddress"/>
      <permission roles="amq,alice-user" type="deleteAddress"/>
      <permission roles="amq,alice-user,bob-user" type="send"/>
      <permission roles="amq,alice-user,bob-user" type="consume"/>
      <permission roles="amq,alice-user,bob-user" type="browse"/>
      <permission type="manage" roles="amq,alice-user,bob-user"/>
   </security-setting>
</security-settings>

<address-settings>
   <address-setting match="test/signal/#">
      <default-exclusive-queue>true</default-exclusive-queue>
      <max-size-bytes>-1</max-size-bytes>
      <page-size-bytes>10485760</page-size-bytes>
      <address-full-policy>BLOCK</address-full-policy>
      <slow-consumer-threshold>1</slow-consumer-threshold>
      <slow-consumer-policy>KILL</slow-consumer-policy>
      <slow-consumer-check-period>5</slow-consumer-check-period>
      <default-purge-on-no-consumers>true</default-purge-on-no-consumers>
      <default-max-consumers>1</default-max-consumers>
      <auto-create-addresses>true</auto-create-addresses>
      <auto-delete-addresses>true</auto-delete-addresses>
      <default-address-routing-type>ANYCAST</default-address-routing-type>
      <auto-create-queues>true</auto-create-queues>
      <auto-delete-queues>true</auto-delete-queues>
   </address-setting>
</address-settings>

最佳答案

为了在目标上创建订阅,用户必须拥有创建队列的权限。队列代理上的订阅。您尚未授予 bob123 此权限,因此代理不会允许。

此外,由于您对目标使用 MQTT 语法(使用 / 字符),因此您需要将代理配置为使用它作为分隔符,以便您的匹配项实际上适用于您的安全设置地址设置,例如:

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

关于mqtt - 地址 test/signal/abc 上的用户 : Bob does not have permission ='CREATE_DURABLE_QUEUE' for queue bob. test/test/signal/abc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59616617/

相关文章:

node.js - 如何实现MQTT Broker端授权?

java - 如何订阅 MQTT 主题并在 Eclipse (Java) 上打印收到的消息

mqtt - 使用 Mosquitto 代理形成集群

python - 在 Flask 模板中显示 MQTT 数据

ubuntu - 以什么用户身份运行 hive-mq 代理?

jms - Wildfly JMS 服务器主从行为

activemq-artemis - 如何在ActiveMQ Artemis中实现虚拟主题功能

java - 使用 QoS 2 进行发布的发布者获得代理或订阅者的确认

java - 何时在后台不需要 MQTT 的 Android 应用程序上断开 MQTT 服务

docker - 来自 natted 网络上客户端的 Wildfly : AMQ214016: Failed to create netty connect ion java. nio.channels.UnresolvedAddressException