Пользователь: Боб не имеет разрешения = 'CREATE_DURABLE_QUEUE' для очереди bob.test / test / signal / ab c на адрес test / signal / abc - PullRequest
0 голосов
/ 06 января 2020

Я настроил файл ActiveMQ Artemis broker.xml таким образом, чтобы один пользователь (Алиса) создал адрес / очередь в Artemis с протоколом MQTT. Роль Алисы настроена так, что она может создавать адреса / очереди / отправлять / потреблять

И другой пользователь (Боб) будет только получать / отправлять сообщения в этой очереди. Роль Боба настроена так, что он может отправлять и получать сообщения только из тем.

Но я получаю следующие исключения при выполнении следующих действий:

  1. Публикация в топи c с использованием Алиса
  2. Подписка на ту же топи c с использованием Боба

Также появляется то же исключение при выполнении следующих действий:

  1. Подписка на топи c с помощью Алисы
  2. Подписка на ту же топи c с использованием 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]

брокер. 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>

1 Ответ

0 голосов
/ 06 января 2020

Чтобы создать подписку в месте назначения, пользователь должен иметь разрешение на создание очереди. Очередь является подпиской на брокере. Вы не дали bob123 этого разрешения, поэтому брокер не разрешит его.

Кроме того, поскольку вы используете синтаксис MQTT для пунктов назначения (в котором используется символ /), вам необходимо настройте посредника так, чтобы он использовался как символ-разделитель, чтобы ваши совпадения действительно работали для ваших security-setting и address-setting, например:

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