我在GlassFish服務器上配置了JMS主題,並且實現了一個客戶端來訂閱主題並打印它收到的消息。這工作正常。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上可能嗎?
到目前爲止,我已經試圖改變GlassFish管理頁面上的「默認JMS主機的憑據並傳遞我對創建連接設置新的憑據:
TopicConnection connection = connFactory.createTopicConnection("myuser", "mypass");
但這並沒有工作。它適用,如果我通過默認的憑據:
TopicConnection connection = connFactory.createTopicConnection("admin", "admin");
我想我必須改變憑據的其他地方,但我不知道在哪裏。即使它起作用,它也會迫使客戶端進行身份驗證?我的意思是,我的客戶沒有其他方式可以訂閱我的主題而無需憑證?