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");
資格情報を別の場所で変更する必要があると思いますが、どこかわかりません。そして、それが機能したとしても、クライアントに認証を強制しますか? つまり、クライアントが資格情報なしでトピックをサブスクライブする方法は他にないのでしょうか?