zoukankan      html  css  js  c++  java
  • ActiveMQ in Action(4)

    关键字: activemq

    2.4 Security
        ActiveMQ支持可插拔的安全机制,用以在不同的provider之间切换。
    2.4.1 Simple Authentication Plugin
        Simple Authentication Plugin适用于简单的认证需求,或者用于建立测试环境。它允许在XML配置文件中指定用户、用户组和密码等信息。以下是ActiveMQ配置的一个例子:

    Xml代码 复制代码
    1. <plugins>  
    2.   ...   
    3.   <simpleAuthenticationPlugin>  
    4.     <users>  
    5.       <authenticationUser username="system" password="manager" groups="users,admins"/>  
    6.       <authenticationUser username="user" password="password" groups="users"/>  
    7.       <authenticationUser username="guest" password="password" groups="guests"/>  
    8.     </users>  
    9.   </simpleAuthenticationPlugin>  
    10. </plugins>  
     

    2.4.2 JAAS Authentication Plugin
        JAAS Authentication Plugin依赖标准的JAAS机制来实现认证。通常情况下,你需要通过设置java.security.auth.login.config系统属性来配置login modules的配置文件。如果没有指定这个系统属性,那么JAAS Authentication Plugin会缺省使用login.config作为文件名。以下是一个login.config文件的例子:

    activemq-domain {
        org.apache.activemq.jaas.PropertiesLoginModule required debug=true         org.apache.activemq.jaas.properties.user="users.properties"         org.apache.activemq.jaas.properties.group="groups.properties";
    };
        这个login.config文件中设置了两个属性:org.apache.activemq.jaas.properties.user和org.apache.activemq.jaas.properties.group分别用来指向user.properties和group.properties文件。需要注意的是,PropertiesLoginModule使用本地文件的查找方式,而且查找时采用的base directory是login.config文件所在的目录。因此这个login.config说明user.properties和group.properties文件存放在跟login.config文件相同的目录里。
        以下是ActiveMQ配置的一个例子:

    Xml代码 复制代码
    1. <plugins>  
    2.   ...   
    3.   <jaasAuthenticationPlugin configuration="activemq-domain" />  
    4. </plugins>  
        基于以上的配置,在JAAS的LoginContext中会使用activemq-domain中配置的PropertiesLoginModule来进行登陆。

        ActiveMQ JAAS还支持LDAPLoginModule、CertificateLoginModule、TextFileCertificateLoginModule等login module。

    2.4.3 Custom Authentication Implementation
        可以通过编码的方式为ActiveMQ增加认证功能。例如编写一个类继承自XBeanBrokerService。

    Java代码 复制代码
    1. package com.yourpackage;   
    2.   
    3. import java.net.URI;   
    4. import java.util.HashMap;   
    5. import java.util.Map;   
    6.   
    7. import org.apache.activemq.broker.Broker;   
    8. import org.apache.activemq.broker.BrokerFactory;   
    9. import org.apache.activemq.broker.BrokerService;   
    10. import org.apache.activemq.security.SimpleAuthenticationBroker;   
    11. import org.apache.activemq.xbean.XBeanBrokerService;   
    12.   
    13. public class SimpleAuthBroker extends XBeanBrokerService {   
    14.     //   
    15.     private String user;   
    16.     private String password;   
    17.        
    18.     @SuppressWarnings("unchecked")   
    19.     protected Broker addInterceptors(Broker broker) throws Exception {   
    20.         broker = super.addInterceptors(broker);   
    21.         Map passwords = new HashMap();   
    22.         passwords.put(getUser(), getPassword());   
    23.         broker = new SimpleAuthenticationBroker(broker, passwords, new HashMap());   
    24.         return broker;   
    25.     }   
    26.        
    27.     public String getUser() {   
    28.         return user;   
    29.     }   
    30.   
    31.     public void setUser(String user) {   
    32.         this.user = user;   
    33.     }   
    34.   
    35.     public String getPassword() {   
    36.         return password;   
    37.     }   
    38.   
    39.     public void setPassword(String password) {   
    40.         this.password = password;   
    41.     }   
    42. }  
        以下是ActiveMQ配置文件的一个例子:
    Xml代码 复制代码
    1. <beans>  
    2.   …   
    3.   <auth:SimpleAuthBroker  
    4.     xmlns:auth="java://com.yourpackage"  
    5.     xmlns="http://activemq.org/config/1.0" brokerName="SimpleAuthBroker1" user="user" password="password" useJmx="true">  
    6.      
    7.     <transportConnectors>  
    8.       <transportConnector uri="tcp://localhost:61616"/>  
    9.     </transportConnectors>  
    10.   </auth:SimpleAuthBroker>  
    11.   …   
    12. </beans>  
       在这个配置文件中增加了一个namespace auth,用于指向之前编写的哪个类。同时为SimpleAuthBroker注入了两个属性值user和password,因此在被SimpleAuthBroker改写的addInterceptors方法里,可以使用这两个属性进行认证了。ActiveMQ提供的SimpleAuthenticationBroker类继承自BrokerFilter(可以简单的看成是Broker的Adaptor),它的构造函数中的两个Map分别是userPasswords和userGroups。 SimpleAuthenticationBroker在 addConnection方法中使用userPasswords进行认证,同时会把userGroups的信息保存到ConnectionContext中 。

    2.4.4 Authorization Plugin
        可以通过Authorization Plugin为认证后的用户授权,以下ActiveMQ配置文件的一个例子:

    Xml代码 复制代码
    1. <plugins>  
    2.   <jaasAuthenticationPlugin configuration="activemq-domain"/>  
    3.      
    4.   <authorizationPlugin>  
    5.     <map>  
    6.       <authorizationMap>  
    7.         <authorizationEntries>  
    8.           <authorizationEntry queue=">" read="admins" write="admins" admin="admins" />  
    9.           <authorizationEntry queue="USERS.>" read="users" write="users" admin="users" />  
    10.           <authorizationEntry queue="GUEST.>" read="guests" write="guests,users" admin="guests,users" />  
    11.              
    12.           <authorizationEntry topic=">" read="admins" write="admins" admin="admins" />  
    13.           <authorizationEntry topic="USERS.>" read="users" write="users" admin="users" />  
    14.           <authorizationEntry topic="GUEST.>" read="guests" write="guests,users" admin="guests,users" />  
    15.   
    16.           <authorizationEntry topic="ActiveMQ.Advisory.>" read="guests,users" write="guests,users" admin="guests,users"/>  
    17.         </authorizationEntries>  
    18.       </authorizationMap>  
    19.     </map>  
    20.   </authorizationPlugin>  
    21. </plugins>   
    京东技术
  • 相关阅读:
    Java核心(七):this和super的区别
    Java核心(六):==和equals()的区别;重写equals()方法
    java核心(五):堆内存、栈内存;String赋值时,内存变化
    Java核心(四):Java中的装箱和拆箱
    Java核心(三):代码块的作用
    从数据库中导出.csv文件
    mongodb中数据类型的坑
    return 和 echo 的小坑
    对数据库中初始的数据在后台进行翻译
    SQL语句执行效率及分析
  • 原文地址:https://www.cnblogs.com/wely/p/6198670.html
Copyright © 2011-2022 走看看