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