2014-11-03 53 views
2

我使用彈簧安全和我實現的UserDetailsS​​ervice這完全處理我的用戶登錄過程。如何檢查每個請求用戶身份在春季安全

問題是這樣的: 有從數據庫中檢查每個請求的用戶狀態的標準方法,例如,如果用戶的帳戶狀態更改爲「鎖定」或同時他還在簽約,在他的角色得到改變,該申請阻止他繼續他的工作。

這裏的問題是,我的自定義UserDetailsS​​ervice類中的「public UserDetails loadUserByUsername(String arg0)」僅在登錄過程中被調用,並且userDetails對象會保留數據,因爲登錄過程已執行並且userDetails信息不新鮮。

我可以通過一些變通喜歡把自己從數據庫中的用戶對象解決這一點,並通過一個傾聽者檢查其狀態。但我覺得春季安全可能會爲這種情況提供一個通用的解決方案。

請幫忙。謝謝。

+0

你可以寫一個過濾器,所有的請求(除了登錄請求)映射,並檢查用戶是否鎖定與否。 – 2014-11-03 23:55:44

+0

感謝您的解決方案。實際上它也出現在我的腦海裏,但是我認爲可能在春季安全中設置了一個標誌或屬性,我可以強制應用程序根據需要加載用戶詳細信息。 – Saro 2014-11-03 23:57:29

+0

我不認爲你可以只用一個標誌管理它,你需要一個過濾器添加到'過濾chain'。如果您可以探索如何處理「記住我」過濾器,您可能會有所瞭解。 – 2014-11-04 00:09:58

回答

1

的基本思想是使用自定義的SecurityContextRepository其丟棄保存在HTTP會話用戶的詳細信息。

對於一個完整的例子,一個工作項目,請看看我的回答類似的問題在這裏:Spring Security logoff a user while runtime

+0

非常感謝! – Saro 2014-11-08 06:42:01

+0

沒問題。祝你好運! – 2014-11-08 08:22:54