JMS Topic с аутентификацией для подписчиков на Glassfish

У меня есть тема JMS, настроенная на моем сервере Glassfish, и я реализовал клиент для подписки на тему и печати полученных сообщений. Это работает нормально.

Вот мой клиент. Вы можете видеть, что я решил использовать своего рода «прямое соединение» вместо использования поиска JNDI.

com.sun.messaging.ConnectionFactory connFactory = new com.sun.messaging.ConnectionFactory();
connFactory.setProperty(com.sun.messaging.ConnectionConfiguration.imqAddressList, "mq://localhost:7676/");
TopicConnection connection = connFactory.createTopicConnection();
TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("myTopic");
TopicSubscriber subscriber = session.createSubscriber(topic);
subscriber.setMessageListener(this);
connection.start();

Таким образом, любой клиент может подписаться на мою тему. Теперь я хочу найти способ заставить клиента аутентифицироваться до того, как он начнет получать сообщения. Возможно ли это на Glassfish?

До сих пор я пытался изменить учетные данные «хоста JMS по умолчанию» на странице администрирования Glassfish и передать новые учетные данные, которые я установил при создании соединения:

TopicConnection connection = connFactory.createTopicConnection("myuser", "mypass");

Но это не сработало. Это работает, если я передам учетные данные по умолчанию:

TopicConnection connection = connFactory.createTopicConnection("admin", "admin");

Я думаю, что мне нужно изменить учетные данные где-то еще, но я не знаю, где. И даже если это сработает, это заставит клиента аутентифицироваться? Я имею в виду, что у моего клиента не будет другого способа подписаться на мою тему, не имея учетных данных?


person Pedro Estevao    schedule 15.01.2014    source источник


Ответы (1)


Короткий ответ:

1 - Создайте пользователя на imqbroker (glassfish3\mq\bin\imqusermgr.exe).

2 - Отредактируйте файл accesscontrol.properties (myDomain\imq\instances\imqbroker\etc) и укажите, какой пользователь может использовать какую тему.

Длинный ответ:

1 - Выполнить через командную строку:

\glassfish3\mq\bin\imqusermgr add -varhome c:\glassfish3\glassfish\domains\myDomain\imq -u myuser -p mypass

Это создаст пользователя на imqbroker, обозначенного varhome, с определенным именем пользователя и паролем.

2 - В файле accesscontrol.properties (myDomain\imq\instances\imqbroker\etc) отредактируйте раздел destination based access control примерно так:

topic.myTopic.consume.allow.user=myUser
topic.myTopic.consume.deny.user=*
topic.*.consume.allow.user=*

Это позволит myUser потреблять myTopic и запрещать доступ другим пользователям. А остальные темы, которые у вас есть, по-прежнему будут доступны всем пользователям. Обратите внимание, что topic.*.consume.allow.user=* не заменяет topic.myTopic.consume.deny.user=*.

Мой код остался прежним:

TopicConnection conn = connectionFactory.createTopicConnection("myuser", "mypass");
person Pedro Estevao    schedule 20.01.2014