Аутентификацию JMS с плоским файлом легко настроить на Glassfish (см. http://docs.sun.com/app/docs/doc/821-0027/aeofg?a=view).
Проблема в клиентской части. Я пишу автономный Java-клиент для доступа к своим ресурсам JMS (ConnectionFactory
и Destination
) через JNDI.
Как передать имя пользователя и пароль в JMS от этого клиента?
Я уже пробовал несколько вещей, таких как:
1) Добавление этих учетных данных в InitialContext
context.addToEnvironment(InitialContext.SECURITY_PRINCIPAL, "username");
context.addToEnvironment(InitialContext.SECURITY_CREDENTIALS, "password");
2) Использование параметров имени пользователя и пароля JMS в фабрике соединений
connectionFactory.createConnection();
Однако ни один из этих методов не работает.
Когда я запускаю программу, я просто получаю:
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)
Таким образом, он продолжает пытаться аутентифицироваться с пользователем «гость».
Для этого теста я использовал connection.NORMAL.deny.user=*
в качестве правила разрешения (accesscontrol.properties
).
Интересно то, что это исключение выбрасывается еще до того, как будет получен коэффициент соединения:
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) */
Надеюсь, кто-нибудь знает ответ.
Спасибо заранее
С уважением,
Динеш