• 技术文章 >Java >java教程

    详解JMS 之 Active MQ的安全机制

    怪我咯怪我咯2017-06-26 11:44:53原创939

    一、认证

    认证(Authentication):验证某个实体或者用户是否有权限访问受保护资源。

    MQ提供两种插件用于权限认证:
    (一)、Simple authentication plug-in:直接把相关的权限认证信息配置到XML文件中。

    配置 conf/activemq.xml 的 broke元素添加插件:

            <plugins><simpleAuthenticationPlugin><users><authenticationUser username="admin" password="password" groups="admins,publishers,consumers"/><authenticationUser username="publisher" password="password"  groups="publishers,consumers"/><authenticationUser username="consumer" password="password" groups="consumers"/><authenticationUser username="guest" password="password"  groups="guests"/></users></simpleAuthenticationPlugin></plugins>

    代码中的认证方式两种:

    1、在创建Connection的时候认证

    //用户认证Connection conn = connFactory.createConnection("admin","password");

    2、也可以在创建ConnectionFactory工厂的时候认证

    ConnectionFactory connFactory = new ActiveMQConnectionFactory("admin","password",url);

    (二)、JAAS authentication plug-in:实现了JAAS API,提供了一个更强大的和可定制的权限方案。

    配置方式:

    1、在conf目录中创建 login.config 文件 用户 配置 PropertiesLoginModule:

    activemq-domain {
        org.apache.activemq.jaas.PropertiesLoginModule required debug=trueorg.apache.activemq.jaas.properties.user="users.properties"org.apache.activemq.jaas.properties.group="groups.properties";
    };

    2、在conf目录中创建users.properties 文件用户配置用户:

    # 创建四个用户
    admin=password  
    publisher=password 
    consumer=password  
    guest=password

    3、在conf目录中创建groups.properties 文件用户配置用户组:

    #创建四个组并分配用户
    admins=admin
    publishers=admin,publisher
    consumers=admin,publisher,consumer
    guests=guest

    4、将该配置插入到activemq.xml中:

    <!-- JAAS authentication plug-in --><plugins><jaasAuthenticationPlugin configuration="activemq-domain" /></plugins>

    5、配置MQ的启动参数:

    使用dos命令启动:

    D:\tools\apache-activemq-5.6.0-bin\apache-activemq-5.6.0\bin\win64>activemq.bat -Djava.security.auth.login.config=D:/tools/apache-activemq-5.6.0-bin/apache-activemq-5.6.0/conf/login.config

    6、在代码中的认证方式与Simple authentication plug-in 相同。

    二、授权

    基于认证的基础上,可以根据实际用户角色来授予相应的权限,如有些用户有队列写的权限,有些则只能读等等。
    两种授权方式
    (一)、目的地级别授权

    JMS目的地的三种操作级别:
      Read :读取目的地消息权限
      Write:发送消息到目的地权限
      Admin:管理目的地的权限

    配置方式 conf/activemq.xml :

    <plugins><jaasAuthenticationPlugin configuration="activemq-domain" /><authorizationPlugin><map><authorizationMap><authorizationEntries><authorizationEntry topic="topic.ch09" read="consumers" write="publishers" admin="publishers" /></authorizationEntries></authorizationMap></map></authorizationPlugin></plugins>

    (二)、消息级别授权

    授权特定的消息。

    开发步骤:
    1、实现消息授权插件,需要实现MessageAuthorizationPolicy接口

    public class AuthorizationPolicy implements MessageAuthorizationPolicy {private static final Log LOG = LogFactory.
            getLog(AuthorizationPolicy.class);public boolean isAllowedToConsume(ConnectionContext context,
            Message message) {
            LOG.info(context.getConnection().getRemoteAddress());
            String remoteAddress = context.getConnection().getRemoteAddress();if (remoteAddress.startsWith("/127.0.0.1")) {
                LOG.info("Permission to consume granted");return true;
            } else {
            LOG.info("Permission to consume denied");return false;
        }
        }
    }

    2、把插件实现类打成JAR包,放入到activeMq 的 lib目录中

    3、在activemq.xml中设置<messageAuthorizationPolicy>元素

    <messageAuthorizationPolicy><bean class="org.apache.activemq.book.ch6.AuthorizationPolicy" xmlns="http://www.springframework.org/schema/beans" /></messageAuthorizationPolicy>

    三、自定义安全插件

    插件逻辑需要实现BrokerFilter类,并且通过BrokerPlugin实现类来安装,用于拦截,Broker级别的操作:

    demo:基于IP地址,限制Broker连接。

    package ch02.ptp;import java.util.List;import org.apache.activemq.broker.Broker;import org.apache.activemq.broker.BrokerFilter;import org.apache.activemq.broker.ConnectionContext;import org.apache.activemq.command.ConnectionInfo;public class IPAuthenticationBroker extends BrokerFilter {
        List<String> allowedIPAddresses;public IPAuthenticationBroker(Broker next, List<String>allowedIPAddresses) {super(next);this.allowedIPAddresses = allowedIPAddresses;
        }public void addConnection(ConnectionContext context, ConnectionInfo info) throws Exception {
            String remoteAddress = context.getConnection().getRemoteAddress();if (!allowedIPAddresses.contains(remoteAddress)) {throw new SecurityException("Connecting from IP address "
                + remoteAddress+ " is not allowed" );
            }super.addConnection(context, info);
        }
    }

    安装插件:

    package ch02.ptp;import java.util.List;import org.apache.activemq.broker.Broker;import org.apache.activemq.broker.BrokerPlugin;public class IPAuthenticationPlugin implements BrokerPlugin {
        List<String> allowedIPAddresses;public Broker installPlugin(Broker broker) throws Exception {return new IPAuthenticationBroker(broker, allowedIPAddresses);
        }public List<String> getAllowedIPAddresses() {return allowedIPAddresses;
        }public void setAllowedIPAddresses(List<String> allowedIPAddresses) {this.allowedIPAddresses = allowedIPAddresses;
        }
    }

    ps:将这连个类打成jar包放到activemq的lib目录下

    配置自定义插件:

    <plugins><bean xmlns="http://www.springframework.org/schema/beans" id="ipAuthenticationPlugin"   class="org.apache.activemq.book.ch6.IPAuthenticationPlugin"><property name="allowedIPAddresses"><list>  <value>127.0.0.1</value></list></property></bean></plugins>

    以上就是详解JMS 之 Active MQ的安全机制的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:Active 机制 安全
    上一篇:java:Redis是干什么的 下一篇:Java一切都是对象
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 一招教你使用java快速创建Map(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一文讲解Java中初始化List集合的8种方式(附代码)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网