有没有办法从JMS消息中获取原始IP地址?

时间:2008-11-06 23:36:34

标签: jms

我有一个系统,其中不同的服务器进程正在处理通过JMS代理从各个客户端作为JMS消息传递的请求。

我正在尝试识别消息的来源。有没有办法获得有关原产地的知识产权或某些识别信息?

澄清:我已经让未知用户部署了客户端,所以我试图避免更改消息类......

7 个答案:

答案 0 :(得分:3)

JMS规范中提到了一个名为 JMSXUserID 的可选JMS头,它标识了一些JMS提供程序支持的用户发送消息(代理验证并确保正确以避免欺骗)。

例如,how to enable it in Apache ActiveMQ

答案 1 :(得分:1)

我不相信。至少我找不到办法。

如果您需要将回复发送回邮件来源,您可以让发件人设置“JMSReplyTo”属性并回复该目的地。

或者,您可以稍微更改消息传递架构并嵌入源信息消息本身。发件人会在邮件中标识自己,收件人可以从那里读取。

答案 2 :(得分:0)

如果您可以控制正在发送的消息的构造,则始终可以将IP地址作为属性添加到消息中。然后,您可以使用Message上的getStringProperty方法检查值。

答案 3 :(得分:0)

如果您控制发送邮件的客户端的代码,您可以创建一些属性名称,比如说“IPOfSender”,并在每条带有Message.setStringProperty()的邮件中包含该属性。

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

答案 4 :(得分:0)

它取决于您的JMS服务器。某些服务器具有管理工具/ API,允许您查看连接详细信息。

答案 5 :(得分:0)

使用glassfish,如果你查看消息的getJMSMessageID(),你应该看到一个字符串,效果为“ID:40-192.168.0.242(f5:62:c6:58:22:6f)-52506 -122885191641" 。看起来好像IP是消息id的子字符串。

请注意,这是我在我们的设置中可以看到的内容,因此可能还有其他因素在起作用(例如,spring),但我知道字符串不是由我们以编程方式创建的。

答案 6 :(得分:0)

简短回答:否