zoukankan      html  css  js  c++  java
  • 【ActiveMQ】之安全机制(二)客户端连接安全

    配置完管控台的安全之后,我们还要配置客户端连接安全,否则大家都可以往MQ上发送消息,这样太危险!

    根据官方文档,http://activemq.apache.org/security.html

    ActiveMQ配置客户端安全有两种方式,

    ActiveMQ 4.x及更高版本通过各种不同的提供商提供可插拔的安全性。
    
    最常见的提供者是
    JAAS进行身份验证
    一个使用简单XML配置文件的默认授权机制。

    首先我们看一下简单的XML形式授权机制

    直接在conf/activemq.xml里如下配置即可

    <plugins>   
        <simpleAuthenticationPlugin>   
            <users>   
                <authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/>   
            </users>   
       </simpleAuthenticationPlugin>   
    </plugins> 

    ${activemq.username},  ${activemq.password}

    引入的是conf/credentials.properties 里面的配置

    在客户端连接时候配置响应的用户名,密码即可

    第二种使用JAAS身份认证

    首先查看配置文件conf/login.config ,users.properties,groups.properties 三个配置文件

    activemq {
        org.apache.activemq.jaas.PropertiesLoginModule required
            org.apache.activemq.jaas.properties.user="users.properties"
            org.apache.activemq.jaas.properties.group="groups.properties";
    };

    <plugins>
                  <!--  use JAAS to authenticate using the login.config file on the classpath to configure JAAS -->
                  <jaasAuthenticationPlugin configuration="activemq-domain" />
    
                  <!--  lets configure a destination based authorization mechanism -->
                  <authorizationPlugin>
                    <map>
                      <authorizationMap>
                        <authorizationEntries>
                          <authorizationEntry queue=">" read="admins" write="admins" admin="admins" />
                          <authorizationEntry queue="USERS.>" read="users" write="users" admin="users" />
                          <authorizationEntry queue="GUEST.>" read="guests" write="guests,users" admin="guests,users" />
                          
                          <authorizationEntry topic=">" read="admins" write="admins" admin="admins" />
                          <authorizationEntry topic="USERS.>" read="users" write="users" admin="users" />
                          <authorizationEntry topic="GUEST.>" read="guests" write="guests,users" admin="guests,users" />
                          
                          <authorizationEntry topic="ActiveMQ.Advisory.>" read="guests,users,admins" write="guests,users,admins" admin="guests,users,admins"/>
                        </authorizationEntries>
                        
                        <!-- let's assign roles to temporary destinations. comment this entry if we don't want any roles assigned to temp destinations  -->
                        <tempDestinationAuthorizationEntry>  
                          <tempDestinationAuthorizationEntry read="tempDestinationAdmins" write="tempDestinationAdmins" admin="tempDestinationAdmins"/>
                       </tempDestinationAuthorizationEntry>               
                      </authorizationMap>
                    </map>
                  </authorizationPlugin>
             </plugins>

    queue=">"代表所有队列,read="admins" write="admins"  代表admins组账号都可以读写,admin="admins"代表admins组账号可以创建queues,这里需要注意的是configuration=“”的值一定要和login.config里面的一致

    由users.properties文件可知,admin=admin  用户名和密码都是admin

    测试代码如下 

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes = MqApplication.class)
    public class MqTest {
    
        @Autowired
        JmsMessagingTemplate jmsMessagingTemplate;
        
        //发送String消息
        @Test
        public void testStr() {
            try {
                //往luna队列发送消息
                jmsMessagingTemplate.convertAndSend("luna","to luna queue ");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

     我们往queue发送队列正常,看着是正确,等等,点击Name查看以下queue内容, 控制台出现以下错误,日志错误如下,这是什么原因呢?

     because Failed with SecurityException: User name [system] or password is invalid.

     接着看官方文档,

     

    也就是说,默认的username和password还是在credentials.properties,而我们JAAS配置的是admin=admin,怎么办呢?

    第一种方式如下,在credentials.properties中新加如下,重启ActiveMQ测试

    刷新ActiveMQ管控台正常看到queues数据

    第二种方式,不修改credentials.properties,我们在users.properties中加入system=manager

     

    在groups.properties中新加

     

    接着刷新ActiveMQ管控台可以正常看到数据

  • 相关阅读:
    基于spark实现表的join操作
    关于IO的一些数字
    scala的REPL shell的调用
    搭建eclipse+maven+scala-ide的scala web开发环境
    Apache Mesos总体架构
    spark下测试akka的分布式通讯功能
    akka创建actor时报错:IllegalArgumentException: no matching constructor found on class $iwC$$iwC$$iwC$$iwC$
    akka构建简单分布式应用
    Memcached 工作原理
    分析Redis架构设计
  • 原文地址:https://www.cnblogs.com/gyjx2016/p/8573383.html
Copyright © 2011-2022 走看看