zoukankan      html  css  js  c++  java
  • 转载-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 th 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的安全机制的分析,至于这种方法是否灵活、方便、安全,与编程模式实现的安全机制有什么异同还需要进一步分析比较。

  • 相关阅读:
    hibernate更新
    让hibernate支持mysql的text或者longtext
    hibernate的查询
    微博获取原图时重定向到图片的url
    java判断字符串编码
    爬取微博存入数据库时出错
    循环监听事件出错,只能监听最后一个
    org.hibernate.AssertionFailure: null id don't flus
    eclipse有时候导入了包,但是还是有红线,找不到
    hibernate注解创建表总是失败,显示表不存在
  • 原文地址:https://www.cnblogs.com/e206842/p/5585739.html
Copyright © 2011-2022 走看看