2014-01-15 4 views
0

У меня есть тема JMS, настроенная на моем сервере 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"); 

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

ответ

1

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

1 - Создание пользователя на imqbroker (glassfish3 \ MQ \ Bin \ imqusermgr.exe).

2 - отредактируйте файл accesscontrol.properties (myDomain \ imq \ экземпляры \ 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 \ Экземпляры \ imqbroker \ и т.д.), отредактировать раздел 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"); 
Смежные вопросы