本文简单介绍ActiveMQ通过JAAS实现的安全机制。
JAAS(Java Authentication and Authorization Service)也就是java认证/授权服务。这是两种不同的服务,下面对其做一些区别:
验证(Authentication)就是要验证一个用户的有效性,即用户名、密码是否正确;
授权(Authorization)就是授予用户某种角色,以使用户只能访问具有相应角色的资源。
ActiveMQ中使用JAAS实现消息安全和控制是通过使用配制文件来实现的。
认证服务:
编写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"; };
把这个文件放在CLASSPATH所指路径下,我选择放在%ACTIVEMQ_HOME%\conf\下,这样就不用设置了。然后编写users.properties和groups.properties文件,内容可参考下例:
#users.properties system=manager user=password guest=password
#groups.properties admins=system users=system,user guests=guest
内容是显而易见的,users.properties文件里面配制了三个用户,并分别制定了他们的密码。groups.properties文件里配制了三个组,以及每个组里面的用户。这两个文件和login.config放在同一个目录。
授权服务:
通过修改activemq.xml文件来增加对不同group中的用户指定所能进行的操作。
<beans xmlns="http://activemq.org/config/1.0"> <!-- Allows us to use system properties as variables in this configuration file --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/> <broker useJmx="true"> <!-- In ActiveMQ 4, you can setup destination policies --> <destinationPolicy> <policyMap> <policyEntries> <policyEntry topic="FOO.>"> <dispatchPolicy> <strictOrderDispatchPolicy /> </dispatchPolicy> <subscriptionRecoveryPolicy> <lastImageSubscriptionRecoveryPolicy /> </subscriptionRecoveryPolicy> </policyEntry> </policyEntries> </policyMap> </destinationPolicy> <persistenceAdapter> <journaledJDBC journalLogFiles="5" dataDirectory="${activemq.home}/activemq-data"/> <!-- To use a different datasource, use the following syntax : --> <!-- <journaledJDBC journalLogFiles="5" dataDirectory="../activemq-data" dataSource="#postgres-ds"/> --> </persistenceAdapter> <transportConnectors> <transportConnector name="default" uri="tcp://localhost:61616" discoveryUri="multicast://default"/> <transportConnector name="stomp" uri="stomp://localhost:61613"/> </transportConnectors> <networkConnectors> <!-- by default just auto discover the other brokers --> <networkConnector name="default" uri="multicast://default"/> <!-- <networkConnector name="host1 and host2" uri="static://(tcp://host1:61616,tcp://host2:61616)" failover="true"/> --> </networkConnectors> <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,guests" write="guests" admin="admins,guests" /> <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" write="guests,users" admin="guests,users"/> </authorizationEntries> </authorizationMap> </map> </authorizationPlugin> </plugins> </broker> </beans>
<authorizationPlugin>标签所包含的内容授权配制信息。
从上面的配置文件可以看出,ActiveMQ使用者针对不同的queue或者topic设置了可以进行操作的组。此处主要涉及三种操作权限:read, write, admin,下面对其详细介绍。
read:可以从queue或者topic里面接收消息
write:可以向queue或者topic发送消息
admin:可以创建queue或者topic(可能还有别的功能)
这些文件配制好时,ActiveMQ就具有了基本的安全机制,另外需要注意的是,在ActiveMQ 4.0.1 release版中,并没有带有activemq-jaas.jar,需要自己下载。但在apache-activemq-4.1.1release版中已经增加activemq-jaas-4.1.1.jar,在ActiveMQ的lib目录下。
以上是对ActiveMQ的基于JAAS的安全机制的分析,至于这种方法是否灵活、方便、安全,与编程模式实现的安全机制有什么异同还需要进一步分析比较。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mqboss/archive/2007/06/22/1662481.aspx