转载

【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. import java.net.URI;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import org.apache.activemq.broker.Broker;
  6. import org.apache.activemq.broker.BrokerFactory;
  7. import org.apache.activemq.broker.BrokerService;
  8. import org.apache.activemq.security.SimpleAuthenticationBroker;
  9. import org.apache.activemq.xbean.XBeanBrokerService;
  10. public class SimpleAuthBroker extends XBeanBrokerService {
  11.     //
  12.     private String user;
  13.     private String password;
  14.     @SuppressWarnings("unchecked")
  15.     protected Broker addInterceptors(Broker broker) throws Exception {
  16.         broker = super.addInterceptors(broker);
  17.         Map passwords = new HashMap();
  18.         passwords.put(getUser(), getPassword());
  19.         broker = new SimpleAuthenticationBroker(broker, passwords, new HashMap());
  20.         return broker;
  21.     }
  22.     public String getUser() {
  23.         return user;
  24.     }
  25.     public void setUser(String user) {
  26.         this.user = user;
  27.     }
  28.     public String getPassword() {
  29.         return password;
  30.     }
  31.     public void setPassword(String password) {
  32.         this.password = password;
  33.     }
  34. }
以下是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.     <transportConnectors>
  7.       <transportConnector uri="tcp://localhost:61616"/>
  8.     </transportConnectors>
  9.   </auth:SimpleAuthBroker>
  10.   …
  11. </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.   <authorizationPlugin>
  4.     <map>
  5.       <authorizationMap>
  6.         <authorizationEntries>
  7.           <authorizationEntry queue=">" read="admins" write="admins" admin="admins" />
  8.           <authorizationEntry queue="USERS.>" read="users" write="users" admin="users" />
  9.           <authorizationEntry queue="GUEST.>" read="guests" write="guests,users" admin="guests,users" />
  10.           <authorizationEntry topic=">" read="admins" write="admins" admin="admins" />
  11.           <authorizationEntry topic="USERS.>" read="users" write="users" admin="users" />
  12.           <authorizationEntry topic="GUEST.>" read="guests" write="guests,users" admin="guests,users" />
  13.           <authorizationEntry topic="ActiveMQ.Advisory.>" read="guests,users" write="guests,users" admin="guests,users"/>
  14.         </authorizationEntries>
  15.       </authorizationMap>
  16.     </map>
  17.   </authorizationPlugin>
  18. </plugins>
 
正文到此结束
Loading...