2010-03-06 9 views
5

La autenticación JMS de archivos planos es fácil de configurar en Glassfish (consulte http://docs.sun.com/app/docs/doc/821-0027/aeofg?a=view).Autenticación Glassfish JMS (archivo plano)

El problema es la parte del cliente. Estoy escribiendo un cliente de Java independiente para acceder a mis recursos JMS (ConnectionFactory y Destination) a través de JNDI.

¿Cómo se transfiere un nombre de usuario y una contraseña a JMS desde ese cliente?

ya he intentado varias cosas tales como:

1) Adición de esas credenciales en el InitialContext

context.addToEnvironment(InitialContext.SECURITY_PRINCIPAL, "username"); 
context.addToEnvironment(InitialContext.SECURITY_CREDENTIALS, "password"); 

2) El uso de parámetros de usuario y contraseña JMS en la fábrica de conexiones

connectionFactory.createConnection(); 

Sin embargo, ninguno de esos métodos está funcionando.

Cuando ejecuto el programa, sólo se obtiene:

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) 

Por lo tanto, sigue tratando de autenticar con el usuario "invitado".

Para esta prueba, utilicé connection.NORMAL.deny.user=* como regla de permiso (accesscontrol.properties).

La parte interesante es que esta excepción se produce incluso antes de que se obtiene la conexión factore:

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) */ 

Esperanza alguien sabe la respuesta.

Muchas gracias de antemano

Saludos,

Dinesh

Respuesta

2

Aceptar He encontrado una solución, que es no utilizar JNDI, sino utilizar específica del proveedor JMS API en su lugar, tal como se describe en http://weblogs.java.net/blog/kalali/archive/2010/03/02/open-mq-open-source-message-queuing-beginners-and-professionals-0

El código final es:

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

que en esta ocasión lleva al error

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

Cuál es grande;)

Así, solución está funcionando. Sin embargo, si alguien sabe cómo lograr esto también con JNDI sería aún mejor.