Die Flat-File-JMS-Authentifizierung kann einfach auf Glassfish eingerichtet werden (siehe http://docs.sun.com/app/docs/doc/821-0027/aeofg?a=view).Glassfish JMS-Authentifizierung (Flat-File)
Das Problem ist der Client-Teil. Ich schreibe einen eigenständigen Java-Client, um über JNDI auf meine JMS-Ressourcen (ConnectionFactory
und Destination
) zuzugreifen.
Wie übergebe ich einen Benutzernamen und ein Passwort an JMS von diesem Client?
Ich habe bereits versucht, einige Dinge, wie zum Beispiel:
1) Hinzufügen dieser Anmeldeinformationen in dem Initial
context.addToEnvironment(InitialContext.SECURITY_PRINCIPAL, "username");
context.addToEnvironment(InitialContext.SECURITY_CREDENTIALS, "password");
2) JMS-Benutzername und Passwort-Parameter in der Verbindungsfactory
connectionFactory.createConnection();
Keine dieser Methoden funktioniert jedoch.
Wenn ich das Programm laufen, bekomme ich nur:
com.sun.messaging.jms.JMSSecurityException: [C4084]: Échec de
l'authentification de l'utilisateur : user=guest, broker=localhost:7676(34576)
at com.sun.messaging.jmq.jmsclient.ProtocolHandler.authenticate
(ProtocolHandler.java:1084)
So hält es versuchen, mit dem „Gast“ Benutzer zu authentifizieren.
Für diesen Test verwendete ich connection.NORMAL.deny.user=*
als Berechtigungsregel (accesscontrol.properties
).
Der interessante Teil ist, dass diese Ausnahme auch ausgelöst wird, bevor die Verbindung factore erhalten:
InitialContext context = new InitialContext();
ConnectionFactory connectionFactory =
(ConnectionFactory)context.lookup("jms/middleware/factory");
/* The exception is thrown here, so authentication MUST have happened
before already (i.e. NOT in the createConnection(username, password) method) */
Hoffnung jemand die Antwort kennt.
Vielen Dank im Voraus
Grüße,
Dinesh