授权
为了完成安全迁移,我们需要处理授权策略。在 ActiveMQ 中,授权是使用 conf/activemq.xml
中的适当代理插件指定的,例如
<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 策略。
如果您希望允许用户发送消息,您需要在各自的代理中定义以下策略。
ActiveMQ | Artemis |
---|---|
write | send |
在 Artemis 中,用于消费和浏览的策略是分开的,您需要同时定义它们来控制对目标的read
访问权限。
ActiveMQ | Artemis |
---|---|
read | consume |
browse |
admin
权限也是一样的。您需要为持久和非持久核心队列定义单独的创建和删除策略。
ActiveMQ | Artemis |
---|---|
admin | createNonDurableQueue |
deleteNonDurableQueue | |
createDurableQueue | |
deleteDurableQueue |
最后,还有一个使用通配符定义策略的问题。下表显示了通配符语法的差异。
通配符 | 描述 | ActiveMQ | Artemis |
---|---|---|---|
分隔符 | 在路径中分隔单词 | . | . |
单个单词 | 匹配路径中的单个单词 | * | * |
任何单词 | 递归地匹配路径中的任何单词 | > | # |
基本上,默认情况下只有任何单词字符不同,这就是为什么我们在 Artemis 示例中使用GUESTS.#
而不是 ActiveMQ 的GUESTS.>
语法的原因。
掌握了这些知识,您应该能够将当前的 ActiveMQ 授权策略转换为 Artemis。