2016-11-22 30 views
1

以下是我的應用程序的部署配置。沒有爲webapp1 & webapp2配置羣集,也沒有爲CAS1 & CAS2配置羣集。我完全依靠會話粘性,使從最終用戶總是由同一個服務器提供一定的交通,然而,我配置CAS1和CAS2中票的複製,以保證SSO工作:在多節點設置中使用Spring Security + CAS SSO進行併發會話控制?

VIP1 +-- webapp1 --+ VIP2 +- CAS1 
    |    |  | 
    +-- webapp2 --+  +- CAS2 

我看到很多文章/博客描述瞭如何使用spring安全性實現併發會話控制,以下是我想到的問題。

1)我想通過彈簧安全和CAS SSO驗證我對併發會話控制的理解,所以讓我們假裝我們沒有webapp2和CAS2。根據我的理解,webapp的spring安全和CAS都必須得到確認才能讓用戶成功登錄到webapp。 Webapp的spring安全性通過在其安全上下文中添加身份驗證來確認,而CAS通過添加TGC cookie來確認。
如果我將同時會話控制(無效前一個)同時應用於webapp和CAS,並且當UserA和UserB使用相同的登錄時,將會發生以下情況:
1.1)UserA被成功驗證,因此他從CAS收到cookie並離開在webapp的spring安全上下文中進行身份驗證。
1.2)由於UserB使用相同的登錄名,這是第二次登錄身份驗證,CAS將使UserA失效。
1.2)當webapp的spring安全性被確認登錄被認證並且發現這是第二次同一登錄被認證時,所以webapp的spring安全性使UserA失效。
1.3)當UserA嘗試訪問webapp時,webapp的spring安全性將UserA重定向到CAS。
1.4)CAS確定UserA帶來的Cookie無效,因此UserA被要求再次輸入登錄憑證。

那麼這是正確的嗎? 2)說我的理解是正確的,讓我們把webapp2和CAS2放回去,就像我在開始時提到的那樣,沒有聚集。如果UserA由webapp1和CAS1提供服務,而UserB由webapp2和CAS2提供服務,那麼我認爲併發會話控制在這種情況下不起作用,我需要實現自定義SessionRegistryImpl,ConcurrentSessionControlStrategy和ConcurrentSessionFilter,是否正確?

謝謝您的時間。

回答

2

我只使用了預認證CAS,其中CAS添加了帶有認證信息的標頭,然後您可以根據CAS/LDAP進行解析。

你的分析看起來是正確的,通過查看javaDoc和源代碼,你幾乎就在那裏。

  • 你需要一個定製的SessionRegistry讓你有一個全球定位跟蹤會話(Hazelcast或數據庫)的。
  • 您需要ConcurrentSessionControlStrategy它將檢查是否達到併發會話的限制。
  • 您將需要ConcurrentSessionFilter,因此具有過期會話的用戶將被註銷。

除了需要設置RegisterSessionAuthenticationStrategyAbstractAuthenticationProcessingFilter,因爲默認是NullAuthenticatedSessionStrategy,這意味着創建會話時的SessionRegistry不會被調用。

相關問題