1 默认策略

在我们自定义的login中增加一个选择框

<input type="submit" value="Login" />     <br/> <br/>     <input type="checkbox" value=true name="_spring_security_remember_me" />记住密码

        <!-- 记住我功能 --><security:remember-me key="elim" />

web.xml中增加成上述就可以实现了。

默认有效时间是两周,启用rememberMe之后的两周内,用户都可以直接跳过系统,直接进入系统。

实际上,Spring Security中的rememberMe是依赖cookie实现的,当用户在登录时选择使用rememberMe,系统就会在登录成功后将为用户生成一个唯一标识,并将这个标识保存进cookie中,我们可以通过浏览器查看用户电脑中的cookie。

图 16.2. rememberMe cookie

从上图中,我们可以看到Spring Security生成的cookie名称是SPRING_SECURITY_REMEMBER_ME_COOKIE,它的内容是一串加密的字符串,当用户再次访问系统时,Spring Security将从这个cookie读取用户信息,并加以验证。如果可以证实cookie有效,就会自动将用户登录到系统中,并为用户授予对应的权限。

2. 持久化策略

rememberMe的默认策略会将username和过期时间保存到客户主机上的cookie中,虽然这些信息都已经进行过加密处理,不过我们还可以使用安全级别更高的持久化策略。在持久化策略中,客户主机cookie中保存的不再用username,而是由系统自动生成的序列号,在验证时系统会将客户cookie中保存的序列号与数据库中保存的序列号进行比对,以确认客户请求的有效性,之后在比对成功后才会从数据库中取出对应的客户信息,继续进行认证和授权等工作。这样即使客户本地的cookie遭到破解,攻击者也只能获得一个序列号,而不是用户的登录账号。

如果希望使用持久化策略,我们需要先在数据库中创建rememberMe所需的表。

create table persistent_logins (username varchar(64) not null,series varchar(64) primary key,token varchar(64) not null,last_used timestamp not null
);

然后要为配置文件中添加与数据库的链接。

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="org.hsqldb.jdbcDriver"/><property name="url" value="jdbc:hsqldb:res:/hsqldb/test"/><property name="username" value="sa"/><property name="password" value=""/>
</bean>

最后修改http中的配置,为remember-me添加data-source-ref即可,Spring Security会在初始化时判断是否存在data-source-ref属性,如果存在就会使用持久化策略,否则会使用上述的默认策略。

<http auto-config='true'><intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" /><intercept-url pattern="/**" access="ROLE_USER" /><remember-me data-source-ref="dataSource"/>
</http>

默认策略和持久化策略是不能混用的,如果你首先在应用中使用过默认策略的rememberMe,未等系统过期便换成了持久化策略,之前保留的cookie也无法通过系统验证,实际上系统会将cookie当做无效标识进行清除。同样的,持久化策略中生成的cookie也无法用在默认策略下。

转载于:https://www.cnblogs.com/wenjieyatou/p/6118256.html

spring security remember me实现自动登录相关推荐

  1. SpringBoot集成Spring Security(2)——自动登录

    在上一章:SpringBoot集成Spring Security(1)--入门程序中,我们实现了入门程序,本篇为该程序加上自动登录的功能. 文章目录 一.修改login.html 二.两种实现方式 2 ...

  2. 基于Spring Security与JWT实现单点登录

    基于RBAC的权限管理 RBAC(Role-Based Access Control):基于角色的访问控制 当前项目中,RBAC具体的表现为: 管理员表:ams_admin 角色表:ams_role ...

  3. Spring Security OAuth2——自定义OAuth2第三方登录(Gitee)并与UsernamePassword登录关联解决方案

    前文:Spring Security OAuth2--自定义OAuth2第三方登录(Gitee) Maven 主要 <!--Spring Security--><dependency ...

  4. 基于Spring Security的AJAX请求需要登录的解决方案

    基于Spring Security的AJAX请求需要登录的解决方案 参考文章: (1)基于Spring Security的AJAX请求需要登录的解决方案 (2)https://www.cnblogs. ...

  5. Spring Boot + Spring Security + JWT + 微信小程序登录

    Spring Boot + Spring Security + JWT + 微信小程序登录整合教程 参考文章 文章目录 整合思想 整合步骤 1. AuthenticationToken 2. Auth ...

  6. 手把手教你如何使用Spring Security(上):登录授权

    文章目录 一.什么是 Spring Security? 官方介绍 通俗来讲 二.初始搭建 创建 启动 三.项目原理 原理 思考 四.登录认证 登录过滤器 配置过滤器链 类补充 五.登录效果 效果演示 ...

  7. java oauth sso 源码_基于Spring Security Oauth2的SSO单点登录+JWT权限控制实践

    概 述 在前文<基于Spring Security和 JWT的权限系统设计>之中已经讨论过基于 Spring Security和 JWT的权限系统用法和实践,本文则进一步实践一下基于 Sp ...

  8. Springboot + Spring Security 实现前后端分离登录认证及权限控制

    Spring Security简介 Spring Security 是 Spring 家族中的一个安全管理框架,实际上,在 Spring Boot 出现之前,Spring Security 就已经发展 ...

  9. spring security 安全框架改造统一登录oauth2.0方式

    继上次改造统一登录之后,这次又接到改造任务,这次的项目结构略有不同,不再有web.xml文件,也不是集成的含有拦截器的jar包,而是oauth2.0的授权码(CODE)方式的认证流程, 因为前端还是v ...

最新文章

  1. Python:Selenium和PhantomJS
  2. 一文理清Mybatis中resultType与resultMap之间的关系和使用场景
  3. vsftpd虚拟用户帐号
  4. STM32之CAN---工作/测试模式浅析
  5. buu [BJDCTF 2nd]rsa0
  6. oracle中的存在函数吗,Oracle判断表是否存在的函数
  7. 《微软开源跨平台移动开发实践》团购通知
  8. javaWeb服务详解(含源代码,测试通过,注释)
  9. 城市流动劳动力的数学模型matlab,数学建模_人口预测
  10. 程序发布出现: 服务器无法处理请求---无法生成临时类(result = 1)。 错误CS2001:未能找到源文件“C:\ Windows \ TEMP \ lph54vwf.0.cs”...
  11. AI 算法起家的今日头条为何败给了色情?
  12. [转]mysql中int、bigint、smallint 和 tinyint的区别与长度的含义
  13. 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用
  14. ipsec穿越NAT功能的配置
  15. 蒙特卡洛模拟 matlab实例,蒙特卡洛模拟的简单例子
  16. 简单生成随机迷宫的算法___Prim和DFS
  17. [Vue]鼠标悬停变色
  18. 射频识别(RFID)
  19. 这不是一篇技术型的文章,而是一篇能让你在IT世界中畅游的方法
  20. 前端代码是怎样智能生成的

热门文章

  1. bit,Byte、KB、MB、GB、TB、PB、EB之间的关系
  2. 2021年中国工业互联网安全大赛核能行业赛道writeup之传统流量取证
  3. phaser.min.js_如何使用Phaser 3,Express和Socket.IO构建多人纸牌游戏
  4. 我是如何在尼日利亚的沃里创立Google Developers Group GDG分会的,并达到了100位成员...
  5. 代码简介:向圣诞老人和他的精灵学习Google Analytics(分析)
  6. 利用Procdump+Mimikatz获取Windows帐户密码
  7. 广度优先搜索(BFS)模板
  8. 什么是安全测试?哪些阶段需要安全测试?
  9. SQLSERVER存储过程基本语法使用
  10. CSS面试复习(三):预处理器、工程化方案、三大框架中的CSS