我有一个系统,其中不同的服务器进程正在处理通过JMS代理从各个客户端作为JMS消息传递的请求。
我正在尝试识别消息的来源。有没有办法获得有关原产地的知识产权或某些识别信息?
澄清:我已经让未知用户部署了客户端,所以我试图避免更改消息类......
答案 0 :(得分:3)
JMS规范中提到了一个名为 JMSXUserID 的可选JMS头,它标识了一些JMS提供程序支持的用户发送消息(代理验证并确保正确以避免欺骗)。
答案 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)
简短回答:否