2015-01-31 85 views
0

是否可以從RealmBase.athenticate方法訪問會話ID?我需要從我的自定義領域類中存儲與數據庫關聯的其他信息,並在以下請求期間檢索它。我正在使用Tomcat 8.謝謝!從RealmBase對象訪問sessionid

回答

0

編號

認證不需要使用會話,因此它不會被烘焙到API中。身份驗證也應該從會話管理中分離出來,所以它也不會被烘焙到API中。

你可能仍然可以做到這一點,但它需要一些欺騙。

  1. 編寫一個使用包含Request對象的ThreadLocal的Valve。
  2. 在閥門鏈中的AuthenticationValve之前註冊閥門。
  3. 在Valve中,將用戶的請求填入ThreadLocal,然後調用鏈。
  4. 在您的自定義Realm中,從ThreadLocal中獲取對象。
  5. 在調用鏈回來之後,請記得從ThreadLocal中刪除請求...即使發生異常。
+0

謝謝你的迴應,但似乎不工作。我已經用2個具體的附加類覆蓋了2個方法RealmBase.authenticate(String userId,String accessToken)和FormAuthenticator.authenticate(Request request,HttpServletResponse response)。有兩個不同的問題:1)似乎2種方法使用不同的線程2)在一些調用之後,重用了ThreadId,因此ThreadLocal在線程之間共享,導致信息重疊。 :-(請問你能給我一些例子嗎? – 2015-02-03 00:17:40

+0

我不會爲你寫代碼,它只是一個建議什麼可以工作。是的,線程被重新使用......這就是爲什麼我包括步驟#5上面:它會刪除應該是私密的信息如果您遇到信息泄漏,這是因爲您沒有執行上述第5步 – 2015-02-03 20:53:03

+0

如果沒有任何東西,認證器閥門會自動添加到Tomcat的閥門鏈中您需要明確配置您的''內的認證閥,並確保閥鏈中的*後*與處理ThreadLocal的閥相比*更晚*。 – 2015-02-03 20:54:09