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?
Hinzugefügt funktioniert aber nicht. –
Ja Entschuldigung, das ist das Standardverhalten, haben Sie ActiveMQ nach jeder Änderung neu gestartet? –
Ich habe neu gestartet und jetzt funktioniert es. –