授權

為了完成安全性遷移,我們也需要處理授權策略。在 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。

個結果符合 ""

    沒有結果符合 ""