2014-01-09 71 views
2

我正在使用Spring Framework 4.0發行版以及Spring Security 3.2發行版。我遇到過需要使用功能來限制同一用戶ID的活動會話數量的情況。通過閱讀Spring Security文檔,我瞭解到Spring Security提供了this類型的功能。我試過這樣做。它工作正常(在單個系統上)。我用自定義的UserDetails類使用自定義的UserDetailsS​​ervice類。Spring安全性併發會話控制集羣環境中的最大會話

現在一個問題出現了,我怎麼能在集羣環境中實現這種行爲?我有一個具有粘滯會話機制的集羣環境。

回答

1

您將需要實施自定義SessonRegistry。您將需要一種方法(pref:數據庫)來共享羣集節點之間的會話。

因此,當用戶的成功認證..檢查是否已經有一個sessionId已分配給用戶(在數據庫中)。然後,使較早的一個無效並保存新的會話ID。

此外,爲了驗證請求,您需要使用數據庫驗證它。

+0

是的,這可以作爲管理羣集環境中的併發會話的一種方式。我想到的一種方式是分佈式緩存。 我實際上期待着Spring框架本身的任何支持,所以我不需要關心每個集羣上每個用戶的活動會話。但這聽起來似乎Spring Security沒有提供它。我已閱讀Spring Security 3.2 Release的參考手冊。但很難獲得關於集羣環境中'max-session'屬性的信息。 你知道Spring框架的集羣環境的支持嗎? –

+0

這樣做,根據你哪種方式會更好?要自定義實現SessionRegistry接口還是讓Session偵聽器處理用戶會話? –

+0

會話監聽器?你打算怎麼做?在我的一個項目中,我使用了Custom SessionRegistry和ConcurrentSessionControlStrategy的組合來實現這個 – dhamibirendra