ActiveMQ安全验证机制
activemq在默认情况下是没有启用安全验证的机制的,即不需要用户名密码就可以进行activemq broker节点的连接,在这里我们提供了2种使用简单的方式来定义安全机制:
1.简单认证方式simpleAuthenticationPlugin
在activemq.xml的broker中配置简单认证的插件及用户。
<plugins>
<!-- Configure authentication; Username, passwords and groups -->
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="system" password="manager" groups="users,admins"/>
<authenticationUser username="user" password="password" groups="users"/>
<authenticationUser username="guest" password="password" groups="guests"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
在代码中我们就需要用到用户名和密码了
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(username,password,url);
从5.4开始simpleAuthenticationPlugin也支持匿名访问,用户在不提供用户名和密码的情况下将会产生一个默认的用户名anonymous和分组名anonymous,但是需要开启anonymousAccessAllowed属性,如下
<plugins>
<!-- Configure authentication; Username, passwords and groups -->
<simpleAuthenticationPlugin anonymousAccessAllowed="true">
<users>
<authenticationUser username="system" password="manager" groups="users,admins"/>
<authenticationUser username="user" password="password" groups="users"/>
<authenticationUser username="guest" password="password" groups="guests"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
2.JAAS方式
2.1、在activemq.xml的broker中配置JAAS插件。
<plugins>
<!--use JAAS to authenticate using the login.config file on the classpath to configure JAAS -->
<jaasAuthenticationPlugin configuration="activemq" />
</plugins>
如果没有设置系统变量java.security.auth.login.config来指定配置文件路径,那么默认就是使用broker节点配置conf下的login.config文件,上面的配置configuration="activemq" 指定使用 login.config中的"activemq"配置。
2.2、配置conf/login.config文件
activemq {
org.apache.activemq.jaas.PropertiesLoginModule required
org.apache.activemq.jaas.properties.user="users.properties"
org.apache.activemq.jaas.properties.group="groups.properties";
};
5.11.1之前的版本默认情况时当修改用户权限、分组时都会自动加载,但是5.12开始就会根据reload=true是否设置来进行自动加载。
2.3、在conf/users.properties中配置用户
#用户名=密码
admin=admin
user=password
guest=guest
2.4、在conf/groups.properties中配置用户组(角色)
#组名=用户1,用户2 组名自定义
admins=admin
users=admin,user
guests=guest
我们可以根据不同的用户组来对不同的topic和queue进行相应的权限操作,权限有以下:
read:有消费和从浏览器网页查看的权限;
write:发送消息的权限;
admin:按照自己的需要来创建topic和queue,如果对应的topic或queue不存在。
<broker>
..
<plugins>
..
<authorizationPlugin>
<map>
<authorizationMap>
<!-- 对Queue/Topic进行用户组授权 -->
<authorizationEntries>
<authorizationEntry queue="TEST.Q" read="users" write="users" admin="users" />
<authorizationEntry topic="ActiveMQ.Advisory.>" read="all" write="all" admin="all"/>
</authorizationEntries>
<!-- 对临时目标进行访问控制,这个控制是对所有临时目标 -->
<tempDestinationAuthorizationEntry>
<tempDestinationAuthorizationEntry read="admin" write="admin" admin="admin"/>
</tempDestinationAuthorizationEntry>
</authorizationMap>
</map>
</authorizationPlugin>
..
</plugins>
..
</broker>
上面的临时目标其生命周期与创建它的连接的生命周期关联目标:
1).通过Session的createTemporaryQueue,CreateTemporaryTopic创建临时目标;
2).临时目标的生命周期是创建它的Connection关联,如果关闭了创建此临时目标的Connection,那么临时目标被关闭,内容也将消失;
3).只有创建它的Connection所创建的session才能从临时目标中接收消息;不过任何的生产者都可以向临时目标中发送消息;
更多的信息我们可以参考官网https://activemq.apache.org/security。
推荐阅读
-
ActiveMQ安全验证机制
-
Java线程实现的两种方式及线程安全问题锁机制
-
Tornado基础入门(三) 用户身份验证框架、安全机制
-
验证码机制实现 博客分类: java ServletSwingJavaScriptSUN工作
-
SpringCloud学习之路(一) 开启Security安全验证后,注册服务报错
-
Api28网络请求需要安全验证
-
利用Spring IOC技术实现用户登录验证机制
-
PHP更安全的密码加密机制Bcrypt详解
-
利用Spring IOC技术实现用户登录验证机制
-
java实现简单的窗体和密码验证(传参,事件机制和事件监听的作用过程) 博客分类: java图形界面基础,事件机制 javaJFrame监听器事件机制