2011-12-07 66 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来解决它。

相关问题