2011-12-07 120 views
0

我想改變記住我的請求參數來覆蓋默認參數'_spring_security_remember_me' 和自定義我記得我的服務來替換<remember-me />命名空間配置。Spring Security 3自定義記得我

,所以我配置我記得我的服務:

<bean id="rememberMeServices" class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices"> 
    <property name="key" value="MY_REMEMBER_ME_KEY" /> 
    <property name="cookieName" value="MY_REMEMBER_ME_COOKIE" /> 
    <property name="parameter" value="remember" /> 
    <property name="tokenValiditySeconds" value="1209600" /> 
    <property name="useSecureCookie" value="true" /> 
    <property name="userDetailsService" ref="userDetailsService" /> 
    <property name="alwaysRemember" value="false" /> 
</bean> 

命名空間配置:

<intercept-url pattern="/secure/index" access="ROLE_ADMIN" /> 
<remember-me services-ref="rememberMeServices"/> 

當我運行應用程序和登錄。我發現cookie被創建,然後我關閉我的ie並重新打開。 輸入路徑'/ secure/index',tomcat show me access is denied。 但我恢復到Spring Security的默認配置,一切正常。

我調試代碼中找到

RememberMeAuthenticationFilter#doFilter 
... 
Authentication rememberMeAuth = rememberMeServices.autoLogin(request, response); 
... 
//autoLogin(request, response) method code. 
String rememberMeCookie = extractRememberMeCookie(request); 
... 
protected String extractRememberMeCookie(HttpServletRequest request) { 
    Cookie[] cookies = request.getCookies(); 

    if ((cookies == null) || (cookies.length == 0)) { 
     return null; 
    } 

    for (int i = 0; i < cookies.length; i++) { 
     if (cookieName.equals(cookies[i].getName())) { 
      return cookies[i].getValue(); 
     } 
    } 

    return null; 
} 

的方法extractRememberMeCookie(request),當我使用我的自定義還記得我的服務代碼request.getCookies()總是返回null,但我恢復的Spring Security默認命名空間<remember-me/>,做同樣的(乾淨的餅乾 - 登錄 - 關閉ie - 重新打開 - 入口路徑'/安全/索引'),我也發現cookie是創建。 和我調試代碼我發現request.getCookies()返回cookie名稱'SPRING_SECURITY_REMEMBER_ME_COOKIE'和認證成功。

需要其他配置才能記住我的身份驗證? 但我不知道,有人會幫助我。

回答

0

爲每TokenBasedRememberMeServices文檔,

org.springframework.security.core.userdetails.UserDetailsService是本實施所需 ,以便它可以構建從返回 org.springframework.security.core.userdetails.UserDetails有效 認證。這是 也是必需的,以便用戶的密碼可用,並且可以將 作爲編碼cookie的一部分進行檢查。

也許您的配置不正確/不完整。

+0

謝謝Raghuram。但我不知道爲什麼request.getCookies()總是返回null。如果爲空無法驗證。 – Yang

2

<remember-me />仍需要重點

這應該是

<remember-me key="MY_REMEMBER_ME_KEY" services-ref="rememberMeServices"/> 
0

這其實是一個老帖子。但我只是有問題request.getCookies()空W /春季4.

我已經刪除useSecureCookie = true來解決它。

相關問題