2017-03-24 4 views
0

Apache Activemqバージョン5.14.4を使用して、いくつかのメッセージをキューに送信して読み込みます。私は宛先に接続してユーザー名とパスワードを要求するようにセキュリティレベルを実装したいと思います。ActiveMQ宛先に接続するときの認証によるセキュリティレベルの作成

ActiveMQ securityための公式ドキュメントを読んで、これらを含む多くの例を見て:example1example2は、私はこれを達成するための簡易認証プラグインを使用することを選択しました。

だから、私のactivemq.xmlで、ブローカー要素内私はプラグインを書いた:

そう
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"> 

    <simpleAuthenticationPlugin> 
     <users> 
      <authenticationUser username="Admin01" password="anything" groups="users,admins"/> 
     </users> 
    </simpleAuthenticationPlugin> 


    <authorizationPlugin> 
     <map> 
      <authorizationMap> 
       <authorizationEntries> 
        <authorizationEntry queue=">" write="producers" read="consumers" admin="admins" /> 
        <authorizationEntry topic="ActiveMQ.Advisory.>" admin="admins" />      
       </authorizationEntries> 
      </authorizationMap> 
     </map> 
    </authorizationPlugin> 
... 
</broker> 

、私は消費する宛先に接続するためにユーザー名とパスワードについて聞かれると予想キューからのメッセージ

私は、このような接続と宛先を作成します。

String username = "Admin01"; 
String password = "anithing" 
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616"); 
factory.setTrustedPackages(Arrays.asList("myClass.package_name")); 
Connection connection = null; 
Session session = null; 
Destination destination = null; 
    try { 
     connection = factory.createConnection(username, password); 
     connection.start(); 
     session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
     destination = session.createQueue("myQueue"); 
... 

のActiveMQブローカーが作成され、Iを送信するイベントが発生した場合、それらはMYQUEUEに送信されます。 (factory.setPassword()とfactory.setUserName()で工場出荷時にユーザー名とパスワードを設定したり、接続にのみユーザー名とパスワードを設定したりできません。任意のユーザー名とパスワードを設定してください)。

まあキューからメッセージを消費したい場合は、意図的にパスワードを設定せず、例外もスローされず、メッセージが消費されます。 (私はユーザー名とパスワードを要求する例外がスローされることが予想されます。また、間違ったユーザー名とパスワードで試しました)。

private void consumeMessage() { 
     String userName = "Admin01"; 
     String password = "anything"; 
     ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616"); 
//  factory.setUserName(userName); 
//  factory.setPassword(password); 
     factory.setTrustAllPackages(true); 
     Destination destination = null; 
     try { 
      connection = factory.createConnection(); 
      session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
      destination = session.createQueue("myQueue"); 
      consumer = session.createConsumer(destination); 
      consumer.setMessageListener(this); 
      connection.start(); 
     }catch(JMSException e) { 
      e.printStackTrace(); 
     } 
    } 

私はcredentials.propertiesファイル上書きしている:私はまた、ファイルの上書き

activemq.username=Admin01 
activemq.password=anything 

: デフォルト値:

activemq.username=system 
activemq.password=manager 
guest.password=password 

オーバーライドをadmins=Admin01に groups.propertiesファイルをとusers.propertiesをadmin=Admin01に変更しても、パスワードを尋ねられません。

上記のすべてのファイルは、\ apache-activemq-5.14.4 \ confディレクトリにあります。

「myQueue」からのメッセージを消費してユーザー名とパスワードを要求するために、宛先に接続するときに、このセキュリティレベルをActiveMQに実装するにはどうすればよいですか?

答えて

1

デフォルトでは <simpleAuthenticationPlugin anonymousAccessAllowed="false">は匿名アクセスを拒否します。

+0

が追加されましたが、動作しません。 –

+0

ええ、これはデフォルトの動作です。それぞれの変更後にActiveMQを再起動しましたか? –

+0

私は再スタートし、今は動作します。 –

関連する問題