JMS ブローカーを介してさまざまなクライアントから JMS メッセージとして渡された要求をさまざまなサーバー プロセスが処理しているシステムがあります。
メッセージの発信元を特定しようとしています。発信元に関する IP または識別情報を取得する方法はありますか?
明確化: 不明なユーザーによってクライアントが既にデプロイされているため、メッセージ クラスの変更を回避しようとしています...
JMS ブローカーを介してさまざまなクライアントから JMS メッセージとして渡された要求をさまざまなサーバー プロセスが処理しているシステムがあります。
メッセージの発信元を特定しようとしています。発信元に関する IP または識別情報を取得する方法はありますか?
明確化: 不明なユーザーによってクライアントが既にデプロイされているため、メッセージ クラスの変更を回避しようとしています...
JMSXUserIDと呼ばれる JMS 仕様で言及されているオプションの JMS ヘッダーがあります。これは、一部の JMS プロバイダーがサポートするメッセージ (スプーフィングを回避するためにブローカーが検証して正しいことを確認する) を送信するユーザーを識別します。
私はそうは思いません。少なくとも私は道を見つけることができませんでした。
メッセージの送信元に返信する必要がある場合は、送信者に「JMSReplyTo」プロパティを設定して、その宛先に返信してもらうことができます。
または、メッセージング スキーマを少し変更して、ソース情報メッセージ自体を埋め込むこともできます。送信者はメッセージで自分自身を識別し、受信者はそこからメッセージを読み取ることができます。
送信されるメッセージの構成を制御できる場合は、いつでもIPアドレスをプロパティとしてメッセージに追加できます。次に、MessageのgetStringPropertyメソッドを使用して値を確認できます。
メッセージを送信するクライアントのコードを制御する場合は、「IPOfSender」などのプロパティ名を作成し、Message.setStringProperty()を使用してすべてのメッセージにそのプロパティを含めることができます。
// client code
String myIPString = ...;
Message m = session.createTextMessage();
m.setStringProperty("IPOfSender", myIPString);
...
それはあなたのJMSサーバーに依存します。一部のサーバーには、接続の詳細を表示できる管理ツール/APIがあります。
グラスフィッシュを使用して、メッセージの getJMSMessageID() を見ると、「ID:40-192.168.0.242(f5:62:c6:58:22:6f)-52506-122885191641」という文字列が表示されるはずです。 . IP がメッセージ ID の部分文字列であるかのように見えます。
これは私たちのセットアップで確認できるものであるため、他の要因 (春など) が関係している可能性がありますが、文字列がプログラムによって作成されたものではないことはわかっています。
短い答え: いいえ