当我输入Page时,将删除Spring Security Cookie

时间:2011-12-08 11:15:06

标签: cookies spring-security

我正在实施自定义记住服务,将更高的过期日期设置为记住我的春天Cookie。

RememberMeService扩展了TokenBasedRememberMeService

public RememberMeService() throws Exception {
    super();
}

@Override
protected void setCookie(String[] tokens, int maxAge, HttpServletRequest request, HttpServletResponse response) {
    Integer age = 60*60*24*365*10;
    String cookieValue = encodeCookie(tokens);
    Cookie cookie = new Cookie(getCookieName(), cookieValue);
    cookie.setMaxAge(age);
    cookie.setPath(StringUtils.hasLength(request.getContextPath()) ? request.getContextPath() : "/");
    response.addCookie(cookie);
}

弹簧security.xml文件

<remember-me services-ref="rememberMeServices" />

<beans:bean id="rememberMeServices" class="yorpackage.RememberMeService">
    <beans:property name="key" value="YASUU_REM" />
    <beans:property name="alwaysRemember" value="true" />
</beans:bean>

一切正常,Cookie设置为10年过期日期。 我的问题是,当我关闭浏览器并重新打开它并浏览网站时,cookie将被删除,我无法自动登录该页面。

为什么会这样?谢谢4帮助

修改

经过一番调查后,我发现,春天通过Cookie找到了登录用户,loadUserByUsername()找到了正确的用户,但自动登录失败,Cookie被删除。为什么呢?

2 个答案:

答案 0 :(得分:0)

您不需要使用自定义RememberMeService,只需尝试此操作即可设置自己的到期时间:

<beans:bean id="rememberMeServices" class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices">
    <beans:property name="key" value="YASUU_REM"/>
    <beans:property name="tokenValiditySeconds" value="315360000"/>
</beans:bean>

如果在成功验证后仍需要解决删除cookie的问题,请尝试添加下一个:

<http>
    <remember-me services-ref="rememberMeServices" key="YASUU_REM" />
</http>

答案 1 :(得分:0)

如果您使用的是basicAuthenticationFilter,则可以执行以下操作。

<http entry-point-ref=...>
    ...
    <custom-filter ref="basicAuthenticationFilter" position="BASIC_AUTH_FILTER" />
    <custom-filter ref="rememberMeFilter" position="REMEMBER_ME_FILTER"/>
    ...
</http>

<beans:bean id="authenticationManager"
    class="org.springframework.security.authentication.ProviderManager">
    <beans:property name="providers">
        <beans:list>
            ...
            <beans:ref bean="rememberMeAuthenticationProvider"/>
            ...
        </beans:list>
    </beans:property>
</beans:bean>

<beans:bean id="rememberMeAuthenticationProvider" class="org.springframework.security.authentication.RememberMeAuthenticationProvider">
    <beans:property name="key" value="${MY_KEY}"/>
</beans:bean>