欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ActiveMQ安全验证机制

程序员文章站 2024-03-19 14:27:28
...

      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