Spring Session提供了与Spring Security的“我记得”身份验证的集成的支持:
目的:
- 更改会话过期长度
- 确保会话cookie在Integer.MAX_VALUE处过期。将cookie过期设置为最大的可能值,因为只有在创建会话时才设置cookie。如果将其设置为与会话到期相同的值,那么当用户使用该值时,会话将得到更新,但是cookie过期不会更新,导致过期时间被修复。
具体做法:
1.login.html
<input type="checkbox" name="remember-me" lay-skin="primary" title="记住密码">
注意:name必须为remember-me,否则设置失败。
2.SecurityConfig配置
源码:
//登录成功后的检验 public final void loginSuccess(HttpServletRequest request, HttpServletResponse response, Authentication successfulAuthentication) { //alwaysRemember:默认为false,设置true为永久记住 if (!this.alwaysRemember && !rememberMeRequested(request, this.rememberMeParameterName)) { logger.debug("Remember-me login not requested."); return; } request.setAttribute(REMEMBER_ME_LOGIN_ATTR, true); //validitySeconds默认为2592000 即30天 request.getSession().setMaxInactiveInterval(this.validitySeconds); } /** * Allows customization of whether a remember-me login has been requested. The default * is to return {@code true} if the configured parameter name has been included in the * request and is set to the value {@code true}. * @param request the request submitted from an interactive login, which may include * additional information indicating that a persistent login is desired. * @param parameter the configured remember-me parameter name. * @return true if the request includes information indicating that a persistent login * has been requested. */ protected boolean rememberMeRequested(HttpServletRequest request, String parameter) { //获取参数remember-me对应的值 String rememberMe = request.getParameter(parameter); //如果设置满足以下条件证明用户设置了记住我的功能 if (rememberMe != null) { if (rememberMe.equalsIgnoreCase("true") || rememberMe.equalsIgnoreCase("on") || rememberMe.equalsIgnoreCase("yes") || rememberMe.equals("1")) { return true; } } if (logger.isDebugEnabled()) { logger.debug("Did not send remember-me cookie (principal did not set " + "parameter '" + parameter + "')"); } return false; }