我在 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 有可能吗?
到目前为止,我已经尝试在 Glassfish 管理页面上更改“默认 JMS 主机”凭据并传递我在创建连接时设置的新凭据:
TopicConnection connection = connFactory.createTopicConnection("myuser", "mypass");
但这没有用。如果我通过默认凭据,它会起作用:
TopicConnection connection = connFactory.createTopicConnection("admin", "admin");
我想我必须在其他地方更改凭据,但我不知道在哪里。而且即使有效,也会强制客户端进行身份验证?我的意思是,如果没有凭据,我的客户就没有其他方法可以订阅我的主题吗?