首頁  >  文章  >  Java  >  詳解JMS 之 Active MQ的安全機制

詳解JMS 之 Active MQ的安全機制

怪我咯
怪我咯原創
2017-06-26 11:44:531896瀏覽

一、認證

認證(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><bean class="org.apache.activemq.book.ch6.AuthorizationPolicy" xmlns="http://www.springframework.org/schema/beans" /></messageAuthorizationPolicy>

##三、自訂安全插件

插件邏輯需要實作BrokerFilter類,並且透過BrokerPlugin實作類別來安裝,用於攔截,Broker層級的操作:

  • 存取消費者和生產者

  • 提交交易

  • 新增和刪除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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn