安装好ActiveMQ后,其默认没有任何安全控制,任何人都可以通过8161端口登录Web控制台,任何人都可以通过61616端口发送和接收JMS消息。在实际应用中,需要由我们自己对ActiveMQ进行安全性配置。
首先讲Web控制台的安全性。
ActiveMQ默认使用Jetty作为内嵌的Web服务器。当然,你也可以把ActiveMQ的部署到Tomcat、JBoss等其他服务器中。在这里,我们采用默认内嵌的Jetty,并使用JAAS来实现安全控制。
1、把 jetty-plus-6.1.9.jar 放到 ${activemq.base}/lib/web/中。如果你手上没有jetty-plus-6.1.9.jar文件,可以从Jetty的官方网站下 载,下载Jetty6.1.9版本,解压后,在lib里可以找到该文件。
2、在${activemq.base}/conf/jetty.xml里,加上这么一段:
<userRealms>
<jaasUserRealm name="adminRealm" loginModuleName="adminLoginModule" />
</userRealms>
3、在${activemq.base}/conf/目录下新建一个login.config文件,内容如下:
adminLoginModule {
org.mortbay.jetty.plus.jaas.spi.PropertyFileLoginModule required
debug="true"
file="${activemq.base}/conf/login.properties";
};
4、在${activemq.base}/conf/目录下新建一个login.properties文件,内容如下:
myusername:mypassword,admins
该文件的格式是:用户名:密码,角色
5、在${activemq.base}/webapps/admin/WEB-INF/web.xml里,添加如下内容:
<security-constraint>
<web-resource-collection>
<web-resource-name>adminRealm</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admins</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>adminRealm</realm-name>
</login-config>
6、最后,修改${activemq.base}/bin/activemq文件,把配置文件添加到环境变量。把ACTIVEMQ_OPTS修改为:
ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS $SUNJMX $SSL_OPTS -Djava.security.auth.login.config=${ACTIVEMQ_BASE}/conf/login.config"
配置完毕。重启ActiveMQ,在浏览器里打开http://192.168.1.109:8161/admin,就会弹出一个对话框,要求输入用户名和密码。