2015-06-09 55 views
0

再一次,我希望我在這裏做一些非常愚蠢的事情。 :)春季安全AbstractAuthenticationProcessingFilter擴展丟失實例變量值

我在Spring Security的實現中的AbstractAuthenticationProcessingFilter擴展,並且在擴展,在attemptAuthentication方法,我訪問傳入的HttpServletRequest對象,並拉出一個標頭值,我存儲在一個實例變量。

我注意到,有時在調用另一個自定義方法的過程中,該實例變量的值爲null'd out。但這並不一致。

我看不到我的自定義方法中將負責覆蓋變量的任何代碼,所以我試圖縮小範圍。我希望這不是像我所忽視的線程安全,或某種競爭條件。

有沒有人遇到過這樣的事情?

我正在使用Spring 4.1.1Spring Security 3.2.5

在此先感謝您的幫助。

回答

0

容器只會創建一個過濾器實例,因此具有任何可變實例變量都不是線程安全的。任何併發請求都會導致實例變量的狀態不一致。你應該看看HttpSession

在迴應評論:

這不是那麼多,你必須使用HttpSession中,根本就沒有使用實例變量在servlet /過濾器,因爲它們不是線程安全的。如果你需要維護狀態,並且你不想使用會話,那麼AFAIK,你需要傳遞客戶信息與每個請求。

+0

感謝您的回覆。該安全性適用於某些REST服務,爲了提高性能,我們禁用了會話。是否有其他解決方案缺少啓用會話? – BtySgtMajor

+0

是的,我懷疑並且正在做一個快速更改以避免實例變量,我相信我實際上並不需要它們。感謝您的聲音板和建議! – BtySgtMajor