簡短的回答:使用Message selector。
詳細回答: 該問題沒有提到如何啓動對話。所以在這裏我的答案都是兩種情況。
a)如果客戶端啓動對話(即客戶端向服務器發送消息並等待回覆)。
這是一個請求/回覆場景。消息/ JMS是一個分離的通信系統。但是request/reply是JMS中的一種常見模式。它可以使用相關模式來實現。
- 一個唯一的標識符(correlation id)被髮送到請求消息的一部分。
- 服務器收到消息並在回覆消息中設置相關標識。
- 客戶端使用消息選擇器以正確的相關ID接收消息。
B)如果服務器發起會話(即服務器將消息發送到客戶端,而客戶端請求)。
在這種情況下,可以使用類似的方法。
- 固定客戶端ID分配給每個客戶端。
- 服務器維護所有客戶端ID並將收件人的客戶端ID設置爲消息的相關ID。
- 客戶端使用消息選擇器接收具有相關ID等於其客戶端ID的消息。
關於機密性的更新。
以下信息是從this link中提取出來的,有助於您理解JMS security。
JMS沒有指定一個安全 合同或控制 消息機密性和完整性的API。 安全性被認爲是JMS提供程序特定功能的 。它是由系統管理員 控制的 ,而不是以編程方式或通過J2EE服務器 運行時實現 。
JMS安全性的兩個主要功能是身份驗證和授權。據我所知,JMS針對客戶端訪問的安全性側重於保護JMS目標(而不是單個消息)。只要客戶端有權訪問目標,分配給客戶端的安全角色就適用於屬於目標的所有消息。
在此基礎上,
解決方法1:如果客戶端代碼由可信方控制。
按照我原來的答案我的解決方案。 這將確保郵件傳遞給合適的人。但如果客戶端代碼被故意修改爲接收所有消息,則不會保護任何內容。
解決方案2:爲每個客戶端分配私有目標和用戶帳戶並配置安全性,以便客戶端的用戶帳戶只能訪問其目標。
注意:找到一個關於"Restrictions for message selectors to provide message level authorization"的鏈接。但我認爲這是一個供應商特定的自定義功能。
希望這會有所幫助。
謝謝! 但是如何保密?其他客戶不能「選擇」屬於其他客戶的消息嗎? – 2010-08-14 05:00:47
@ user376803請閱讀更新。 – Sujee 2010-08-16 02:33:35