2017-03-24 18 views
0

いくつかのメッセージを送信するためにActiveMQサーバーを作成します。私はApache Activemqバージョン5.14.4を使用しています ActiveMQサーバーに接続しようとすると、ユーザー名とパスワードの入力を求められます。そのため、以下のように単純な認証プラグインをactivemq.xmlに追加しました。ブローカー要素にユーザー名とパスワードをプログラムで設定してActiveMQサーバーに接続する方法は?

String username = "admin"; 
String password = "anything"; 
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616"); 
     factory.setUserName(username); 
     factory.setPassword(password); 
     factory.setTrustedPackages(Arrays.asList("com.h4p.server")); 
     Connection connection = null; 
     Session session = null; 
     Destination destination = null; 
     try { 
      connection = factory.createConnection(); 
      connection.start(); 
      session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
      destination = session.createQueue("myQueue"); 
     } catch (JMSException e) { 
      e.printStackTrace(); 
     } 
... 

私はSimpleAuthentificationPluginを使用して、セキュリティレベルを追加しました:

<simpleAuthenticationPlugin anonymousAccessAllowed="false"> 
     <users> 
      <authenticationUser username="admin" password="anything" groups="admins"/> 
     </users> 
    </simpleAuthenticationPlugin> 

    <authorizationPlugin> 
     <map> 
      <authorizationMap> 
       <authorizationEntries> 
        <authorizationEntry queue="myQueue" write="admins" read="admins" admin="admins" /> 
        <authorizationEntry topic="ActiveMQ.Advisory.>" write="admins" read="admins" admin="admins" />      
       </authorizationEntries> 
      </authorizationMap> 
     </map> 
    </authorizationPlugin>I 

あなたが見ることができるように、私が作成したとき、私はそれらを設定することができますが、私は、工場レベルでのユーザー名とパスワードを設定接続。

パスワードは工場出荷時に設定するか、または接続を作成するときに最も適切ですか?とにかく

connection = factory.createConnection(username, password); 

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616"); 
     factory.setUserName(username); 
     factory.setPassword(password); 

、セキュリティと私はActiveMQのサーバに接続することはできません。

javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect 

\ apacheの-ActiveMQの-5.14.4の\ confにあるファイルディレクトリには次の設定があります。 users.properties:admin=admin、groups.properties:admins=admin、credentials.properties:

activemq.username=admin 
activemq.password=anything 

私がsimpleAuthenticationPluginとauthorizationPluginにコメントすると、私はサーバーに接続し、送信したいメッセージを送信し、それらを消費することができます。また、私はanonymousAccessAllowed="false"を削除するか、それを真にすると、私はサーバーに接続し、メッセージを送信し、消費することができますが、これは私が望むものではありません。

ユーザー名とパスワードをプログラムで設定することで、そのセキュリティレベルで構成されたActiveMQサーバーにどのように接続できますか教えてください。

+1

あなたのケースでは、あなたが話している設定されたユーザーとグループのプロパティファイルはクライアントを接続するために使用されていないとして、彼らはjaasAuthenticationPluginまたはjmxに使用されます。あなたはactivemqログを投稿できますか? –

答えて

0

SOLVED!

問題は、プラグインを<plugin></plugin>要素に入れなかったことです。 は今、構成は次のとおりです。

<plugins> 
    <simpleAuthenticationPlugin anonymousAccessAllowed="false"> 
     <users> 
      <authenticationUser username="admin" password="anything" groups="admins, producers, consumers"/> 
     </users> 
    </simpleAuthenticationPlugin> 


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

そして、私が使用して接続する:

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(username,password,"tcp://localhost:61616"); 
関連する問題