經過研究和嘗試不同的技術;有兩個獲獎者:
1-名爲ClientContext的新功能將成爲Java 7的一部分:Java 7尚未完成,ClientContext將打破向後兼容性。
2-附加四郎受到的AccessControlContext:這是我選擇的解決方案,Shiro的默認主題檢索機制不考慮Java的訪問控制上下文。我很久以前就進行了一項測試來測試這個測試,但它沒有奏效。現在我知道爲什麼:默認情況下,SecurityUtils.getSubject()調用將檢索到的Subject附加到當前調用的線程上,但這種方法是無用的,因爲線程可以在客戶端之間共享。但AccessControlContext功能更強大,它看起來像JMX與它很好地搭配;您的訪問控制上下文(在JMXAuthenticator的登錄過程中進行身份驗證)可以從MBeanServerForwarder訪問,甚至可以在您的MBean中訪問。我測試了這個與多個客戶端檢索他們的委託人,它只是起作用。
編輯:我如何附加Shiro受當前AccessControlContext?
1 - 創建一個使用生成器類Subject.Builder一個獨立的學科史郎。
2-驗證用戶(使用四郎受試者的登錄方法等)
3-創建一個可變JAAS受試者用含有四郎受試者私有憑證一個單集。
4-提供的JAAS受到底層Java安全系統(例如,返回一個JMXAuthenticator的認證方法中的主題)
甲助手類可以被創建來簡化這種方法。當你需要一個代表Shiro主體執行的動作(授權等)時,從AccessControlContext獲取它並使用其中一個Subject.execute ...方法。這可以在代理或轉發器內執行(如MBeanServerForwarder)。
@Farrukh Najmi新增了我如何做的詳細說明 – 2011-03-02 08:37:54