【问题标题】:ActiveMQ Authorization - How To Read Authorization Entries from DatabaseActiveMQ 授权 - 如何从数据库中读取授权条目
【发布时间】:2017-12-11 06:04:37
【问题描述】:

我正在使用自定义身份验证和授权部署 ActiveMQ。我对自定义授权图有疑问。

问题 我希望从数据库而不是 activemq.xml 中读取授权条目。我们不想在 activemq.xml 文件中写入我们的授权条目。我不想更改默认授权插件中提供的通配符队列名称层次结构。 我需要重写哪些代码组件?

【问题讨论】:

    标签: authorization activemq customization


    【解决方案1】:

    我已经找到了上述问题的答案。我只需要连接我的自定义类,以便我能够从 activemq.xml 以外的源加载授权条目。而且我还可以每 1 分钟重新加载一次授权,这样如果创建了新角色或授权条目,它就会重新加载到系统中而无需重新启动。

    解决方案配置

    1. 创建一个接口 AuthorizationMap 的类。 就我而言,我从 DefaultAuthorizationMap.java 扩展了我的类。我 想要类似的功能,并且只想更改授权条目的输入。我的代码从数据库中读取角色。请参阅下面的“代码-CustomAuthorizationMap”部分。

    2. 在activemq.xml中配置CustomAuthorizationMap类为bean

      <plugins>
          <jaasAuthenticationPlugin configuration="activemq"/>
      
          <authorizationPlugin>
              <map>
                  <bean xmlns="" class="com.test.CustomAuthorizationMap"
              </map>
          </authorizationPlugin
      </plugins>
      
    3. 将库添加到类路径

      a. Create the jar file. Place it in "%ActiveMQ-Home%/lib" folder. E.g. custom-authorization.jar
      b. Modify "%ActiveMQ-Home%/bin/activemq.bat".
         **Replace** 
             set ACTIVEMQ_CLASSPATH=%ACTIVEMQ_CONF%;%ACTIVEMQ_BASE%/conf;%ACTIVEMQ_HOME%/conf;%ACTIVEMQ_CLASSPATH%;
         **With**
             set ACTIVEMQ_CLASSPATH=%ACTIVEMQ_CONF%;%ACTIVEMQ_BASE%/conf;%ACTIVEMQ_HOME%/conf;%ACTIVEMQ_CLASSPATH%;%ACTIVEMQ_HOME%/lib/custom-authorization.jar;
      

    代码-CustomAuthorizationMap

    package com.test.authorization.map;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.activemq.command.ActiveMQQueue;
    import org.apache.activemq.command.ActiveMQTempQueue;
    import org.apache.activemq.command.ActiveMQTopic;
    import org.apache.activemq.filter.DefaultDestinationMapEntry;
    import org.apache.activemq.filter.DestinationMapEntry;
    import org.apache.activemq.security.AuthorizationEntry;
    import org.apache.activemq.security.DefaultAuthorizationMap;
    
    public class SecGwAuthorizationMap extends DefaultAuthorizationMap {
    
        public SecGwAuthorizationMap() throws Exception {
            super();
    
            List<DestinationMapEntry> authorizationEntries = 
           loadAuthorizationEntriesFromPropFiles();
    
    //  For information. After loading I populate 
    //authorization entries like below
    //          AuthorizationEntry entry = new AuthorizationEntry();
    //          entry.setTopic(">");
    //          entry.setAdmin("admins");
    //          entry.setRead("admins");
    //          entry.setWrite("admins");
    //          authorizationEntries.add(entry);
    
    //          entry = new AuthorizationEntry();
    //          entry.setQueue(">");
    //          entry.setAdmin("admins");
    //          entry.setRead("admins");
    //          entry.setWrite("admins");
    //          authorizationEntries.add(entry);
    
    //          entry= new AuthorizationEntry();
    //          entry.setTopic("ActiveMQ.Advisory.>");
    //          entry.setAdmin("gcabrokerusers,admins,users");
    //          entry.setRead("gcabrokerusers");
    //          entry.setWrite("gcabrokerusers");
    //          authorizationEntries.add(entry);
    
    //          entry = new AuthorizationEntry();
    //          entry.setQueue("gcaa.test.jms.>");
    //          entry.setAdmin("gcabrokerusers");
    //          entry.setRead("gcabrokerusers");
    //          entry.setWrite("gcabrokerusers");
    //          authorizationEntries.add(entry);
                setAuthorizationEntries(authorizationEntries);
            }
    
        public SecGwAuthorizationMap(List<DestinationMapEntry> 
        authorizationEntries) {
    
            super(authorizationEntries);
            // TODO Auto-generated constructor stub
        }
    
     }
    

    注意:- 下面是一个示例 roles.properties 文件,用于说明我们如何创建授权角色。

    roles.properties 文件

    //commentedLine      Destination     Read-ACLs    Write-ACLs    AdminAcls     Type
    ActiveMQ.Advisory.>::admins,appUsr::admins,appusr::admins,appUsr::TOPIC
    test.accounts.queue::appClientId::appClientId::admins::QUEUE
    >::admins::admins::admins::QUEUE
    >::admins::admins::admins::TOPIC
    

    【讨论】:

      猜你喜欢
      • 2012-07-14
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 2011-07-25
      • 2014-06-25
      • 2017-10-17
      相关资源
      最近更新 更多