我正在实施自定义记住服务,将更高的过期日期设置为记住我的春天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被删除。为什么呢?
答案 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>