尽管上一篇文章介绍了“代理级身份验证”,但该博文是关于消息级更严格的授权的。
我在现实生活中的项目中并没有这么精细的授权,但是我想自己做,并为读者提供一个教程,以扩展他们对ActiveMQ中安全性的了解并简化他们的工作。
有时,限制对代理的访问以及在某些消息之上进行访问可能很有用。 ActiveMQ没有开箱即用的插件。 您必须自己或多或少地实施它。
使用Maven创建Java项目
您必须首先基于Maven创建一个新的Java项目。
在下一步中,我建议将activemq-all maven依赖项添加到项目中(与activemq安装版本相同),以确保使用正确的导入和类。
此处提供了所有activemq版本和相应的maven依赖片段的列表。
之后,是时候向以前创建的项目中添加新的Java类了。 我的消息级别策略类如下所示:
package com.schulz.bennet.activemq;import org.apache.activemq.broker.ConnectionContext;
import org.apache.activemq.command.Message;
import org.apache.activemq.security.MessageAuthorizationPolicy;public class MyMessageAuthorizationPolicy implements MessageAuthorizationPolicy {public boolean isAllowedToConsume(ConnectionContext ctx, Message m) {return ctx.getUserName().equals("admin");}
}
注意:您的类必须实现MessageAuthorizationPolicy接口,并且还必须向类中添加公共的boolean isAllowedToConsume(…)方法。 在这种方法中,您可以实施逻辑来决定允许谁使用您的消息。 在我的示例中,仅允许管理员使用。
将策略添加到ActiveMQ
打开一个控制台,CD进入您的项目文件夹,并通过调用mvn clean install命令来构建您的maven应用程序。
现在是时候将jar文件从目标项目文件夹复制到ActiveMQ安装的lib文件夹,以使其可用于ActiveMQ。 在最后的配置步骤中,您必须将以下代码段添加到activemq.xml的代理标记中:
<messageAuthorizationPolicy><bean class="com.schulz.bennet.MyMessageMessageAuthorizationPolicy"xmlns="http://www.springframework.org/schema/beans" /></messageAuthorizationPolicy>
提示:不要忘记将其更改为完全合格的类名,而不是我的;-)
通过使用消息来测试策略
首先,您必须通过控制台上的以下命令启动代理:
./bin/activemq start
通过使用activemq脚本使用示例消息来检查您的策略是否正常运行:
./bin/activemq consumer --user admin --password password
这应该起作用,因为以前创建的策略类允许用户admin使用消息。 除此之外,与用户admin以外的其他用户一起使用消息应该是不可能的。 您可以使用其他用户进行测试:
./bin/activemq consumer --user consumer --password password
该使用者不应使用任何单个消息。
如果您有任何疑问,想要我的源代码,YouTube视频或类似的东西,只需发表评论或通过Twitter与我联系。 享受ActiveMQ的乐趣!
翻译自: https://www.javacodegeeks.com/2016/07/message-level-authorization-apache-activemq.html