2010-03-06 10 views
5

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

Antwort

2

OK ich eine Abhilfe gefunden, die nicht JNDI zu bedienen ist, aber herstellerspezifische JMS API stattdessen zu verwenden, wie auf http://weblogs.java.net/blog/kalali/archive/2010/03/02/open-mq-open-source-message-queuing-beginners-and-professionals-0 beschrieben

Der letzte Code ist:

com.sun.messaging.ConnectionFactory connectionFactory = new com.sun.messaging.ConnectionFactory(); 
QueueConnection queueConnection = connectionFactory.createQueueConnection("user01", "password01"); 

die diesmal auf den Fehler

Error: [C4060]: Login failed: user=user01, broker=localhost:7676(53445) 

Das ist sehr gut führt;)

So arbeitet Abhilfe. Aber wenn jemand das auch mit JNDI erreichen kann, wäre es noch besser.