授權
為了完成安全性遷移,我們也需要處理授權策略。在 ActiveMQ 中,授權是使用 conf/activemq.xml
中適當的 Broker 外掛程式來指定的,例如
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=">" read="admins" write="admins" admin="admins"/>
<authorizationEntry queue="USERS.>" read="users" write="users" admin="users"/>
<authorizationEntry queue="GUEST.>" read="guests" write="guests,users" admin="guests,users"/>
<authorizationEntry topic=">" read="admins" write="admins" admin="admins"/>
<authorizationEntry topic="USERS.>" read="users" write="users" admin="users"/>
<authorizationEntry topic="GUEST.>" read="guests" write="guests,users" admin="guests,users"/>
<authorizationEntry topic="ActiveMQ.Advisory.>" read="guests,users" write="guests,users" admin="guests,users"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
Artemis 等效的組態設定是在 etc/broker.xml
中指定,看起來應該像這樣
<security-settings>
<security-setting match="#">
<permission type="createNonDurableQueue" roles="admins"/>
<permission type="deleteNonDurableQueue" roles="admins"/>
<permission type="createDurableQueue" roles="admins"/>
<permission type="deleteDurableQueue" roles="admins"/>
<permission type="consume" roles="admins"/>
<permission type="browse" roles="admins"/>
<permission type="send" roles="admins"/>
</security-setting>
<security-setting match="USERS.#">
<permission type="createNonDurableQueue" roles="users"/>
<permission type="deleteNonDurableQueue" roles="users"/>
<permission type="createDurableQueue" roles="users"/>
<permission type="deleteDurableQueue" roles="users"/>
<permission type="consume" roles="users"/>
<permission type="browse" roles="users"/>
<permission type="send" roles="users"/>
</security-setting>
<security-setting match="GUESTS.#">
<permission type="createNonDurableQueue" roles="guests"/>
<permission type="deleteNonDurableQueue" roles="guests"/>
<permission type="createDurableQueue" roles="guests"/>
<permission type="deleteDurableQueue" roles="guests"/>
<permission type="consume" roles="guests"/>
<permission type="browse" roles="guests"/>
<permission type="send" roles="guests"/>
</security-setting>
</security-settings>
如您所見,兩者相當類似,只有一些小的差異。最重要的差異是 ActiveMQ 中的策略是在目的地名稱上定義的,而 Artemis 中的策略則是應用於核心佇列(請複習前面章節和 Artemis 使用者手冊中關於佇列和地址之間關係的知識)。
另一個值得注意的差異是 Artemis 中的策略更細緻。以下段落和表格顯示與 ActiveMQ 策略對應的 Artemis 策略。
如果您希望允許使用者傳送訊息,您需要在各自的 Broker 中定義以下策略。
ActiveMQ | Artemis |
---|---|
寫入 | 傳送 |
在 Artemis 中,消費和瀏覽的策略是分開的,您需要同時定義它們才能控制對目的地的 read
存取權限。
ActiveMQ | Artemis |
---|---|
讀取 | 消費 |
瀏覽 |
admin
權限也是一樣的。您需要為持久和非持久核心佇列定義單獨的建立和刪除策略。
ActiveMQ | Artemis |
---|---|
管理員 | 建立非持久佇列 |
刪除非持久佇列 | |
建立持久佇列 | |
刪除持久佇列 |
最後,還有一個使用萬用字元定義策略的主題。下表顯示了萬用字元語法的差異。
萬用字元 | 描述 | ActiveMQ | Artemis |
---|---|---|---|
分隔符號 | 分隔路徑中的單字 | . | . |
單字 | 匹配路徑中的單一單字 | * | * |
任何單字 | 遞迴匹配路徑中的任何單字 | > | # |
基本上,預設情況下只有任何單字字元不同,這就是為什麼我們在 Artemis 範例中使用 GUESTS.#
而不是 ActiveMQ 的 GUESTS.>
語法。
有了這些知識,您應該能夠將目前的 ActiveMQ 授權策略轉換為 Artemis。