2011-10-17 74 views
0

我們有自己的中央會話管理。通常,用戶可以使用用戶名和密碼對其進行身份驗證,並因此獲得session_id。所有其他操作都使用該session_id完成。假設會話管理由XML RPC訪問。使用Spring Security的外部認證

我有兩個問題需要落實:在春天做

  • 中心Web應用程序,已登錄表單
  • 外部Web應用程序在Spring也做了,這是依靠 只傳遞SESSION_ID。

關於系統幾乎沒有更多的注意事項:
- SESSION_ID被存儲在cookie(成功登錄後,我不得不Cookie添加到響應)
- 每一個頁面請求在會話管理系統來檢查SESSION_ID有效性

我對Spring很陌生,所以我很難理解在哪裏以及如何實現我的自定義邏輯。

我的問題是:

  1. 哪些部分的系統我要實現有我自己的登錄 邏輯的(必須有訪問響應對象太 - 設置cookie的)? 我嘗試了一些擴展UsernamePasswordAuthenticationFilter並實現我自己的 AuthenticationManager,但我不確定我是否正確地使用 方式。

  2. 是否有點/我該如何在Spring Security方式下實現我的「每個請求會話 檢查」?

回答

0
  • SESSION_ID被存儲在cookie(成功登錄後,我不得不Cookie添加到響應)

在配置到您的<form-login>元素的AuthenticationSuccessHandler這樣做:

<form-login authentication-success-handler-ref="authenticationSuccessHandler"/> 
  • 外部web應用程序也在Spring中進行,這些應用程序依靠通過僅限session_id。

創建一個新的過濾器,您可以在其中檢查session_id cookie。如果cookie不存在或者無效,則重定向到用戶登錄的中央Web應用程序。如果Cookie存在並且有效且用戶尚未通過身份驗證,則創建一個新的Authentication並將其添加到SecurityContextHolder

請查看RememberMeAuthenticationFilter.doFilter(),瞭解您想要在過濾器中執行的操作。

使用<custom-filter>元素將此過濾器添加到過濾器鏈中。

+0

將cookie添加到響應中:我試圖在「MySuccessAuthHandler擴展SavedRequestAwareAuthenticationSuccessHandler」中嘗試,並且在「MyAuthFilter extends UsernamePasswordAuthenticationFilter」中也嘗試了它。在兩種情況下(在debuger中測試)都會調用這些方法,但響應不包含我添加到的任何cookie。 – tole