JMS 메시지에서 Origin IP 주소를 얻는 방법이 있습니까?

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

  •  06-07-2019
  •  | 
  •  

문제

다른 서버 프로세스가 JMS 브로커를 통해 다양한 클라이언트의 JMS 메시지로 전달 된 요청을 처리하는 시스템이 있습니다.

메시지 소스를 식별하려고합니다. IP 또는 원산지에 대한 식별 정보를 얻는 방법이 있습니까?

설명 : 이미 알려지지 않은 사용자가 클라이언트를 배포 했으므로 메시지 클래스 변경을 피하려고 노력하고 있습니다 ...

도움이 되었습니까?

해결책

JMS 사양에 언급 된 옵션 JMS 헤더가 있습니다. JMSXUSERID 일부 JMS 제공 업체가 지원하는 메시지를 보내는 사용자가 메시지를 보내는 사용자를 식별합니다 (브로커가 스푸핑을 피하는 것이 정확합니다).

예를 들어 여기에 있습니다 Apache ActiveMQ에서 활성화하는 방법

다른 팁

나는 그렇게 믿지 않는다. 적어도 나는 길을 찾을 수 없었습니다.

메시지 소스로 회신을 다시 보내야하는 경우 발신자가 "JMSREPLYTO"속성을 설정하고 해당 대상으로 다시 회신 할 수 있습니다.

또는 메시징 스키마를 약간 변경하고 소스 정보 메시지 자체를 포함시킬 수 있습니다. 발신자는 메시지에서 자신을 식별하고 수신은 거기에서 읽을 수 있습니다.

전송중인 메시지의 구성을 제어 할 수있는 경우 언제든지 메시지에 IP 주소를 속성으로 추가 할 수 있습니다. 그런 다음 값을 확인할 수 있습니다 GetStringProperty 메시지에 대한 메소드.

메시지를 보내는 클라이언트의 코드를 제어하면 속성 이름 (ipofsender”라는 속성 이름을 발명 할 수 있으며 모든 메시지에 메시지를 메시지를 포함시킬 수 있습니다 .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-12285191641"의 효과에 대한 문자열이 표시됩니다. . IP가 메시지 ID의 하위 문자열 인 것처럼 보입니다.

이것은 설정에서 볼 수있는 것이므로 다른 요인이있을 수 있지만 (예 : 스프링), 스트링이 프로그램 적으로 만들어지지 않았다는 것을 알고 있습니다.

짧은 대답 : 아니요

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top