0.背景介绍
由于项目安全性的约束,不能在配置文件中暴露一些密码信息。
默认情况下,ActiveMQ在进行接发消息的时候会用户认证。通过ActiveMQ-client初始化ActiveMQConnectionFactory的时候,我们会将用户名和密码暴露在配置文件中。如果对密码进行加密,在程序启动的时候进行解密。有可能存在一点代码量上的改造,【临近上线,这个方案暂时被PASS】。
想通过ActiveMQ服务端去除认证,解决如上所述问题。
1.去除认证
修改ActiveMQ服务端的配置文件。($ActiveMQ_dir/conf/activemq.xml)
在<plugins>节点中注释下列认证方式:
<!-- <jaasAuthenticationPlugin configuration="activemq" /> -->
在<plugins>节点中添加下列认证方式:
<simpleAuthenticationPlugin anonymousAccessAllowed=“true”>
<users>
<authenticationUser username="admin" password="manager"
groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
<!-- Lets configure a destination based authorization mechanism -->
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=">" read="admins,anonymous" write="admins,anonymous" admin="admins,anonymous" />
<authorizationEntry topic=">" read="admins,anonymous" write="admins,anonymous" admin="admins,anonymous" />
<authorizationEntry topic="ActiveMQ.Advisory.>" read="guests,users,anonymous" write="guests,users,anonymous" admin="guests,users,anonymous"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
上面配置即是通过认证插件,在接发Query/Topic/ ActiveMQ.Advisory的时候支持匿名用户。
2.测试
带用户名/密码的配置:
<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<constructor-arg index="0" value="${jms.broker.username}"/>
<constructor-arg index="1" value="${jms.broker.password}"/>
<constructor-arg index="2" value="${jms.broker.url}"/>
<property name="useAsyncSend" value="true"/>
</bean>
不带用户名/密码的配置:
<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<constructor-arg index="0" value="${jms.broker.url}"/>
<property name="useAsyncSend" value="true"/>
</bean>
实现结果:修改服务端的配置,客户端去除认证配置。对收发消息无影响。
3.资料参考
ActiveMQ Security:
http://activemq.apache.org/security.html