2012-09-13 46 views

回答

0

你可以嘗試以下解決方案: 1.插入自定義過濾器進入春季安全過濾器鏈 2.這個過濾器內獲得HTTP會話,當我們更改登錄存儲在那裏請求參數

的值(添加另一個參數),我們需要定製登錄表單和春季登錄處理過濾器的彈簧表示。 這裏是配置:

<authentication-manager alias="authenticationManager"/> 

<beans:bean id="myFilter" class="test.MyAuthenticationProcessingFilter"> 
    <custom-filter position="AUTHENTICATION_PROCESSING_FILTER" /> 
    <beans:property name="defaultTargetUrl" value="/initialize.action"/> 
    <beans:property name="authenticationFailureUrl" value="/login_failed.action"/> 
    <beans:property name="authenticationManager" ref="authenticationManager"/> 
    <beans:property name="alwaysUseDefaultTargetUrl" value="true"/> 
    <beans:property name="filterProcessesUrl" value="/perform_login"/> 
</beans:bean> 

<beans:bean id="entryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint"> 
    <beans:property name="loginFormUrl" value="/login.action"/> 
</beans:bean> 

MyAuthenticationProcessingFilter延伸彈簧的org.springframework.security.ui.webapp.AuthenticationProcessingFilter,包裹attemptAuthentication方法獲取請求參數並將其存儲HTTP會話內。這個類只是爲了展示這個想法而編寫的,爲了更好的練習瀏覽用於用戶名和密碼參數的AuthenticationProcessingFilter代碼。

公共類MyAuthenticationProcessingFilter延伸AuthenticationProcessingFilter {

@Override 
public Authentication attemptAuthentication(HttpServletRequest request) 
     throws AuthenticationException { 
    String param = request.getParameter("_spring_security_remember_me"); 

    HttpSession session = request.getSession(); 
    if (session != null || getAllowSessionCreation()) { 
     session.setAttribute("_spring_security_remember_me", param); 
    } 

    return super.attemptAuthentication(request); 
} 

} 

您可能會注意到「myfilter」的和「爲entryPoint」豆一起定義了另外由元素內定義的參數。您在需要默認行爲時使用。但在我們的例子中,我們使用自定義bean,所以你應該完全刪除元素。 現在我們需要告訴使用我們的豆。

<beans:bean id="myFilter" class="test.MyAuthenticationProcessingFilter"> 
    <custom-filter position="AUTHENTICATION_PROCESSING_FILTER" /> 
    ... 
</beans:bean> 

「爲entryPoint」 傳遞給使用屬性:

<http entry-point-ref="entryPoint"> 
    ... 
    <!-- no form-login here --> 
</http> 
「myfilter」 的豆通過使用bean定義內部元件傳遞到彈簧鏈
0

你的問題有點不清楚,或者你對春天的安全工作記得我有錯誤的印象。閱讀Spring Security的參考第11章「記住,我的身份驗證」

簡單地說是這樣工作的:

  • 如果用戶使用其用戶名和密碼成功登錄並啓用了記住我複選框, Spring Security將創建一個驗證用戶並將其「發送」給用戶的cookie

  • 未登錄用戶請求安全頁面(需要身份驗證)spring會檢查他是否爲有效的cookie。

    • 如果他有這樣一個cookie春季安全將「登錄」他「自動」,並讓他的頁面
    • 他若沒有有效的cookie春天將轉發他到登錄頁面(見上文)

我希望這可以幫助你。