Java 具有Glassfish上订阅者身份验证的JMS主题

Java 具有Glassfish上订阅者身份验证的JMS主题,java,authentication,glassfish,jms-topic,Java,Authentication,Glassfish,Jms Topic,我在Glassfish服务器上配置了一个JMS主题,并实现了一个客户机来订阅该主题并打印它收到的消息。这很好用 这是我的客户。您可以看到,我选择使用一种“直接连接”,而不是使用JNDI查找 com.sun.messaging.ConnectionFactory connFactory = new com.sun.messaging.ConnectionFactory(); connFactory.setProperty(com.sun.messaging.ConnectionConfigurat

我在Glassfish服务器上配置了一个JMS主题,并实现了一个客户机来订阅该主题并打印它收到的消息。这很好用

这是我的客户。您可以看到,我选择使用一种“直接连接”,而不是使用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主机”凭据,并传递我在创建连接时设置的新凭据:

TopicConnection connection = connFactory.createTopicConnection("myuser", "mypass");
但这不起作用。如果我传递了默认凭据,它就会工作:

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

我想我必须到别的地方去换证件,但我不知道在哪里。即使有效,也会迫使客户端进行身份验证?我的意思是,如果没有凭据,我的客户将没有其他方法订阅我的主题。

简短回答:

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 这将允许
myUser
使用
myTopic
并拒绝其他用户。您拥有的其他主题将继续允许所有用户使用它们。请注意,
topic.*.consume.allow.user=*
不会替换
topic.myTopic.consume.deny.user=*

我的代码保持不变:

TopicConnection conn = connectionFactory.createTopicConnection("myuser", "mypass");
TopicConnection conn = connectionFactory.createTopicConnection("myuser", "mypass");