ActiveMq安全认证
1.控制端安全配置(即网站控制台)
ActiveMQ目录conf下找到jetty.xml:
<bean id="securityConstraint" class="org.eclipse.jetty.util.security.Constraint">
<property name="name" value="BASIC" />
<property name="roles" value="user,admin" />
<!-- set authenticate=false to disable login -->
<property name="authenticate" value="true" />
</bean>
含义:
<property name="authenticate" value="true" /> true:需要认证; false:不需要认证
ActiveMQ目录conf下找到jetty-realm.properties
说明:
第一个admin,为认证用户名。
第二个admin123,为认证密码。
第三个admin,为角色。
(3). 重启ActiveMQ验证是否需要认证
重启activemq后,访问:http://127.0.0.1:8161/admin/,弹出http基本认证框,这时候认证生效。
登录成功,说明配置有效!!!
2.客户端安全配置(即程序调用)
上一个小节中,我们连接activemq是使用用户名和密码基本上是没有任何用处的,随便个用户名和密码都可以访问消息队列,这样的坏处是,只要有人知道了我们activemq服务器的ip和端口,就可以连上去消费掉我们的消息,这样非常的不安全,所以我们需要给activemq设置一个username和pasword;
上一节的代码:
//创建连接工厂,连接ActiveMQ服务的连接工厂
//创建工厂,构造方法有三个参数,分别是用户名,密码,连接地址
//无参构造,有默认的连接地址。本地连接
//单参数构造,五无验证模式,没有用户的认证
//三参数构造,有认证+指定地址。默认端口是61616.从ActiveMQ的conf/activemq.xml配置文件中查看
factory = new ActiveMQConnectionFactory("admin","admin","tcp://192.168.0.32:61616");
第一种方式:
在conf下的activemq.xml的broker节点插入一个子节点如下:
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="loafer" password="123456" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
配置完成后,重新启动activemq才能生效,接着我们启动TextConsumer.java(ActiveMq01模块的代码,可以从上一篇博客下载源码)
可以看到报了用户和密码非法异常!
我们改下连接方式:
factory = new ActiveMQConnectionFactory("loafer","123456","tcp://192.168.0.32:61616");
再次运行生产者和消费者,运行结果:
发现安全认证已经OK!
第二种方式:
在conf下的activemq.xml的broker节点插入一个子节点如下:
<!--开启安全认证-->
<plugins>
<!--activemq在login.config文件里定义 -->
<jaasAuthenticationPlugin configuration="activemq"/>
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<!-- > 表示通配符、所有 admins:表示的是用户组不是用户 read表示读的权限,write表示写的权限,admin表示是否能创建-->
<authorizationEntry queue=">" read="admins" write="admins" admin="admins" />
<authorizationEntry topic=">" read="admins" write="admins" admin="admins" />
<authorizationEntry queue="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins" />
<authorizationEntry topic="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins" />
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
conf/login.config文件
用户组配置-conf/groups.properties文件,主要配置用户名
用户信息配置可在conf/users.properties文件中配置,主要配置用户名对应的密码
我们改下连接方式:
factory = new ActiveMQConnectionFactory("loafer","123456","tcp://192.168.0.32:61616");
再次运行生产者和消费者,运行结果:
发现安全认证也OK!