2017-03-24 1 views
0

Ich benutze Apache Activemq Version 5.14.4, um einige Nachrichten in eine Warteschlange zu senden und sie zu lesen. Ich möchte eine Sicherheitsstufe implementieren, wenn ich mich mit dem Ziel verbinde, um einen Benutzernamen und ein Passwort einzugeben.Erstellen einer Sicherheitsstufe durch Authentifizierung bei Verbindung mit einem ActiveMQ-Ziel

Lesen Sie die offizielle Dokumentation für ActiveMQ security und Blick auf eine Menge von Beispielen einschließlich diese: example1, example2, wähle ich das Simple Authentication Plugin zu verwenden, um dies zu erreichen.

in meinem activemq.xml Also, ich innerhalb Broker Element das Plugin geschrieben:

<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> 

Dabei

erwartete ich einen Benutzernamen und ein Passwort, um zu einem Ziel zu verbinden, aufgefordert werden zu konsumieren die Nachrichten aus der Warteschlange.

Ich schaffe die Verbindung und Ziel auf diese Weise:

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"); 
... 

Die ActiveMQ Broker wird erstellt und wenn die Ereignisse, die ich möchte gesendet auftritt, werden sie an myQueue gesendet. (Ich habe auch versucht, ohne einen Benutzernamen und ein Passwort auf die Fabrik mit factory.setPassword() und factory.setUserName() oder setzen Sie den Benutzernamen und das Passwort nur auf die Verbindung, oder beide und es gibt keine Ausnahme geworfen, wenn ich nicht Legen Sie einen Benutzernamen und ein Passwort fest.

Nun, wenn ich die Nachrichten aus der Warteschlange konsumieren will, ich absichtlich kein Passwort festlegen und es gibt keine Ausnahme ausgelöst und die Nachrichten verbraucht werden. (Ich erwartete, dass eine Ausnahme ausgelöst werden würde, um nach dem Benutzernamen und dem Passwort zu fragen. Ich habe es auch mit falschem Benutzernamen und Passwort versucht). Standardwerte:

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(); 
     } 
    } 

ich die credentials.properties Datei überschrieben haben

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

Überschrieben:

activemq.username=Admin01 
activemq.password=anything 

ich auch die Dateien überschrieben: groups.properties zu admins=Admin01 Datei und users.properties zu admin=Admin01 und noch kein Passwort gefragt.

Alle oben genannten Dateien befinden sich im Verzeichnis \ apache-activemq-5.14.4 \ conf.

Was kann ich tun, um diese Sicherheitsstufe auf ActiveMQ zu implementieren, wenn ich eine Verbindung zum Ziel herstellen möchte, um die Nachrichten von "myQueue" zu verwenden, um nach Benutzername und Passwort gefragt zu werden?

Antwort

1

Standardmäßig <simpleAuthenticationPlugin anonymousAccessAllowed="false"> anonymen Zugriff verweigern.

+0

Hinzugefügt funktioniert aber nicht. –

+0

Ja Entschuldigung, das ist das Standardverhalten, haben Sie ActiveMQ nach jeder Änderung neu gestartet? –

+0

Ich habe neu gestartet und jetzt funktioniert es. –

Verwandte Themen