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配置


@Override
protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests()// 该方法所返回的对象的方法来配置请求级别的安全细节
.antMatchers(HttpMethod.GET, "/user/login", "/user/forget", "/user/regist").permitAll()// 登录页面不拦截
.antMatchers(HttpMethod.POST, "/user/checkLogin").permitAll().anyRequest().authenticated()// 对于登录路径不进行拦截
.and().formLogin()// 配置登录页面
.loginPage("/user/login")// 登录页面的访问路径;
.loginProcessingUrl("/user/checkLogin")// 登录页面下表单提交的路径
.failureUrl("/user/login?error=true")// 登录失败后跳转的路径,为了给客户端提示
.defaultSuccessUrl("/index")// 登录成功后默认跳转的路径;
.and().logout()// 用户退出操作
.logoutRequestMatcher(new AntPathRequestMatcher("/user/logout", "POST"))// 用户退出所访问的路径,需要使用Post方式
.permitAll().logoutSuccessUrl("/user/login?logout=true")/// 退出成功所访问的路径
.and().csrf().disable().rememberMe().rememberMeServices(rememberMeServices()).and().headers()
.frameOptions()// 允许iframe内呈现。
.sameOrigin().and().sessionManagement().maximumSessions(1).expiredUrl("/user/login?expired=true");}@Bean
public static RememberMeServices rememberMeServices() {SpringSessionRememberMeServices rememberMeServices = new SpringSessionRememberMeServices();/ /设置1000秒后过期rememberMeServices.setValiditySeconds(1000);
return rememberMeServices;
}

源码:

//登录成功后的检验

  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;
}

微信公众号               

项目中Spring Security 整合Spring Session实现记住我功能相关推荐

  1. .netcore 如何获取系统中所有session_集群化部署,Spring Security 要如何处理 session 共享?

    前面和大家聊了 Spring Security 如何像 QQ 一样,自动踢掉已登录用户(Spring Boot + Vue 前后端分离项目,如何踢掉已登录用户?),但是前面我们是基于单体应用的,如果我 ...

  2. Spring Security整合JWT,实现单点登录,So Easy~!

    前面整理过一篇 SpringBoot Security前后端分离,登录退出等返回json数据,也就是用Spring Security,基于SpringBoot2.1.4 RELEASE前后端分离的情况 ...

  3. Spring boot 整合Spring Security Jwt

    记录学习Spring boot 整合Spring Security Jwt 学习参考 – 慢慢的干货 https://shimo.im/docs/OnZDwoxFFL8bnP1c/read 首先创建S ...

  4. spring boot整合spring security笔记

    最近自己做了一个小项目,正在进行springboot和spring Security的整合,有一丢丢的感悟,在这里分享一下: 首先,spring boot整合spring security最好是使用T ...

  5. spring security 整合sso全记录

    spring security 整合sso全记录 介绍一下我司的sso流程 app security 整合sso的思路 要解决的问题 上代码 介绍一下我司的sso流程 我司的sso流程: app在ss ...

  6. 认证与授权流程与spring boot整合 spring security(1)

    一   spring security 1.1 spring security的作用 Spring Security所解决的问题就是安全访问控制,而安全访问控制功能其实就是对所有进入系统的请求进行拦截 ...

  7. Spring Boot项目中集成Elasticsearch,并实现高效的搜索功能

    Spring Boot项目中集成Elasticsearch 前言 环境准备 引入依赖 配置Elasticsearch连接信息 定义实体类 定义Elasticsearch操作接口 实现搜索功能 总结 前 ...

  8. 使用Spring Security在Spring Boot中进行缓存

    在这篇文章中,我想分享一下O&B的一个团队的经验教训. 他们正在使用带有Spring Security的Spring Boot. 默认情况下,Spring Security保护的所有内容都将通 ...

  9. Spring MVC实现Spring Security,Spring Stomp websocket Jetty嵌入式运行

    使用Spring框架各个组件实现一个在线聊天网页,当有用户连接WebSocket,服务器监听到用户连接会使用Stomp推送最新用户列表,有用户断开刷新在线列表,实时推送用户聊天信息.引入Jetty服务 ...

最新文章

  1. 揭秘天猫双十一背后的那位贤内助
  2. struts2_11_实现自己的拦截器的定义
  3. 自建fasttext类历险记
  4. wordpress插件制作
  5. [论文阅读] (11)ACE算法和暗通道先验图像去雾算法(Rizzi | 何恺明老师)
  6. Command 和 Active Object 模式
  7. 7.25 Ext JS下拉单选框(Combobox,TagFied)使用及疑难问题解决
  8. 遥感分类误差矩阵_遥感卫星影像之分类精度评价
  9. w8服务器dns修改,怎么修改DNS Win8修改DNS服务器地址的具体步骤图解
  10. 精密测量仪器的使用与维护
  11. [从头读历史] 第241节 根据天时定历法
  12. 第6章 TCP/IP路由协议故障处理
  13. 工业交换机的内部组成是什么?
  14. python 获取屏幕颜色_Python3 获取手机屏幕指定坐标点的 RGBA 和 16 进制颜色
  15. 树莓派mjpg-streamer实现监控功能
  16. 使用Python写一个天天酷跑
  17. Codeforces镜像站( Codeforces.live)
  18. springboot 自动注入servlet原理
  19. python画指数函数图像_Python3.0科学计算学习之绘图(一
  20. 社招前端一面react面试题汇总

热门文章

  1. ts16949 软件开发流程图_TS16949体系过程流程图(1)
  2. java青蛙过河打字_趣味算法——青蛙过河(JAVA)
  3. Python获取多核CPU温度 均值
  4. 怎么用notepad将html格式化,Notepad++如何使用Tidy2格式化HTML文档?
  5. 安卓动态修改系统状态栏背景和文字颜色,以及动态显示或隐藏系统状态栏
  6. jsp层级选择器_jQuery 选择器
  7. 短视频拍摄5大景别及11种运镜手法,新手必备拍摄干货丨国仁网络资讯
  8. git检出新分支遇到的文件路径过长Filename too long的问题
  9. win10连接文件服务器记住密码如何删除,win10如何删除局域网共享文件访问密码...
  10. 漂亮的蓝色风格网页设计作品欣赏(系列二)