Есть ли способ получить исходный IP-адрес из сообщения JMS?

StackOverflow https://stackoverflow.com/questions/270788

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня есть система, в которой разные серверные процессы обрабатывают запросы, передаваемые в виде сообщений JMS от различных клиентов через JMS-брокер.

Я пытаюсь определить источник сообщений. Есть ли способ получить IP или некоторую идентифицирующую информацию о происхождении?

Уточнение: у меня уже есть клиент, развернутый неизвестными пользователями, поэтому я стараюсь не менять классы сообщений ...

Это было полезно?

Решение

В спецификации JMS упоминается необязательный заголовок JMS, называемый JMSXUserID , который идентифицирует пользователя, отправляющего сообщение (который брокер проверяет и обеспечивает правильность, чтобы избежать подделки), который поддерживают некоторые провайдеры JMS.

Например, вот как включить его в Apache ActiveMQ

Другие советы

Я не верю в это. По крайней мере, я не смог найти способ.

Если вам нужно отправить ответ обратно источнику сообщения, вы можете указать отправителю установить " JMSReplyTo " собственность и ответь обратно к этому месту назначения.

Или вы можете немного изменить свою схему обмена сообщениями и встроить исходное информационное сообщение. Отправитель идентифицирует себя в сообщении, а получатель может прочитать его оттуда.

Если вы контролируете структуру отправляемых сообщений, вы всегда можете добавить IP-адрес сообщения в качестве свойства. Затем вы можете проверить это значение с помощью getStringProperty в сообщении.

Если вы управляете кодом клиентов, отправляющих сообщения, вы можете придумать какое-нибудь имя свойства, скажем «IPOfSender», и включить это свойство в каждое сообщение с помощью Message.setStringProperty ().

// client code
String myIPString = ...;
Message m = session.createTextMessage();
m.setStringProperty("IPOfSender", myIPString);
...

Это зависит от вашего сервера JMS. Некоторые серверы имеют инструменты администратора / API, которые позволяют просматривать сведения о соединении.

Используя glassfish, если вы посмотрите на getJMSMessageID () сообщения, вы должны увидеть строку с эффектом " ID: 40-192.168.0.242 (f5: 62: c6: 58: 22: 6f) - 52506-122885191641 & Quot ;. Похоже, что IP является подстрокой идентификатора сообщения.

Обратите внимание, что это то, что я вижу в нашей настройке, поэтому могут быть и другие факторы (например, пружина), но я знаю, что строка не была создана нами программно.

Краткий ответ: НЕТ

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top