1. 用户选择了“记住我”成功登录后,将会把username、随机生成的序列号、生成的token存入一个数据库表中,同时将它们的组合生成一个cookie发送给客户端浏览器。
  2. 当没有登录的用户访问系统时,首先检查 remember-me 的 cookie 值 ,有则检查其值包含的 username、序列号和 token 与数据库中是否一致,一致则通过验证。并且系统还会重新生成一个新的 token 替换数据库中对应旧的 token,序列号 series 保持不变 ,同时删除旧的 cookie,重新生成 cookie 值(新的 token + 旧的序列号 + username)发送给客户端。
  3. 如果对应cookie不存在,或者包含的username、序列号和token 与数据库中保存的不一致,那么将会引导用户到登录页面。
  4. 因为cookie被盗用后还可以在用户下一次登录前顺利的进行登录,所以如果你的应用对安全性要求比较高就不要使用Remember-Me功能。

记住我需要数据库支持,因此引入如下依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>

application.yml中配置数据源

spring:thymeleaf:cache: false #关闭thymeleaf缓存prefix: classpath:/templates/suffix: .htmldatasource:username: rootpassword: 密码url: jdbc:mysql://ip:3306/study-security?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC&nullCatalogMeansCurrent=truedriver-class-name: com.mysql.cj.jdbc.Driver#   数据源其他配置, 在 DruidConfig配置类中手动绑定initialSize: 8minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUAL

配置类中设置数据源给JdbcTokenRepositoryImpl

   //============================== 记住我 Spring Security实现了该功能 ====================/*** 1. jdbcTokenRepository()* 2. configure(HttpSecurity http)中配置* 3. 页面  <input name="remember-me" type="checkbox" id="remember"> 中  name="remember-me"是固定的* <p>* <p>* Cookie: JSESSIONID=4ABC0F22FFB87F68228A5409646E0429; remember-me=RzNuT2puTUhPSW9LMVRUcTJScG43dyUzRCUzRDpCYko4QU42aEZpS0NHUzRES09WMXZRJTNEJTNE*/@Autowiredprivate DataSource dataSource;@Beanpublic JdbcTokenRepositoryImpl jdbcTokenRepository() {final JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();jdbcTokenRepository.setDataSource(dataSource);//jdbcTokenRepository.setCreateTableOnStartup(true); //自动创建表,第二次会报错return jdbcTokenRepository;}//========================================================================================

org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl 中定义有sql

/** Default SQL for creating the database table to store the tokens */public static final String CREATE_TABLE_SQL = "create table persistent_logins (username varchar(64) not null, series varchar(64) primary key, "+ "token varchar(64) not null, last_used timestamp not null)";

配置类中添加记住我

    @Overrideprotected void configure(HttpSecurity http) throws Exception {http.formLogin().loginPage("/login/page").loginProcessingUrl("/login").and().authorizeRequests().antMatchers("/login/page").permitAll().anyRequest().authenticated().and().rememberMe() //记住我功能.tokenRepository(jdbcTokenRepository())  //保存登录信息.tokenValiditySeconds(60 * 60 * 24 * 7); //记住我有效时长;http.csrf().disable();}

页面添加<input name="remember-me" type="checkbox" id="remember">

<!DOCTYPE html>
<head><meta charset="utf-8"><title>自定义登录页面</title>
</head>
<body>
<form action="/login" method="POST">用户名:<input name="username" type="text"><br/>密码:<input name="password" type="password"><br/><!-- remember-me 不能修改 -->记住我:<input name="remember-me" type="checkbox" id="remember"><br/><button type="submit" >登录</button>
</form>
</body>
</html>

http://localhost:8080/hello

打开浏览器控制台,点击登录

数据库

Spring Security 入门 Remember-Me 记住我功能相关推荐

  1. Spring Security入门到实践(一)HTTP Basic在Spring Security中的应用原理浅析

    一.Spring Security简介 打开Spring Security的官网,从其首页的预览上就可以看见如下文字: Spring Security is a powerful and highly ...

  2. Spring Security入门基础

    Spring Security入门基础 文章目录 Spring Security入门基础 一,Spring Security的使用 1.1 基本术语 1.2 基本使用 1.2.1 引入依赖 1.2.2 ...

  3. Spring Security 入门(五):在 Spring-Boot中的应用

    前言 本文作为入门级的DEMO,完全按照官网实例演示: 项目目录结构 Maven 依赖  <parent>    <groupId>org.springframework.bo ...

  4. Spring Security 入门(四):自定义-Filter

    前文导读 - Spring Security入门(一):登录与退出 - Spring Security入门(二):基于数据库验证 - Spring Security入门(三):密码加密 本文解决问题 ...

  5. Spring Security入门(三):密码加密

    前文导读 - Spring Security入门(一):登录与退出 - Spring Security入门(二):基于数据库验证 Github 地址 https://github.com/ChinaS ...

  6. 【Spring Security入门】06-QQ登录实现

    准备工作 1.在 QQ互联 申请成为开发者,并创建应用,得到APP ID 和 APP Key. 2.了解QQ登录时的 网站应用接入流程.(必须看完看懂) 为了方便各位测试,直接把我自己申请的贡献出来: ...

  7. Spring Security入门(一) 导学与开发环境安装

    一.导学 课程目标 深入理解Spring Security及相关框架的原理.功能和代码 可以机遇Spring Security及相关框架独立开发认证授权相关功能 掌握抽象和封装的常见技巧,可以编写可重 ...

  8. Spring Security入门01-22 登录验证功能

    课程链接:SpringSecurity框架教程 开始时间:2022-07-17 快速入门 搭建一个Spring Boot项目 添加基础依赖和创建启动类和controller controller @R ...

  9. Spring Boot基础学习笔记20:Spring Security入门

    文章目录 零.学习目标 一.Spring Security (一)Spring Security概述 (二)Spring Boot整合Spring Security实现的安全管理功能 二.基础环境搭建 ...

最新文章

  1. 用GAN来做图像生成,这是最好的方法
  2. Thread Join()的用法
  3. IDOC 创建,增强,管理,配置
  4. MySQL—事务并发问题
  5. 干净的停止tomcat/java应用程序
  6. GRUB 启动 WIN PE 镜像(ISO)
  7. VisualSVN 补丁,你懂的,需要的速度进~ (更新至6.0.1)
  8. 【美团外卖】美食知识图谱的迭代及应用
  9. 父与子的编程之旅 python 3_python3-父与子的编程之旅第十五章
  10. 通过TXT文件批量生成PDF417码
  11. imx6ull linux bluetooth移植
  12. Real格式的影片如何分离、合并音频视频?
  13. Android Application创建到Activity启动(launcher启动和startActivity启动)
  14. 上网行为管理(使用软件Panabit)
  15. scrapy SpiderMiddleware DownloaderMiddleware
  16. 蒙特卡罗算法是什么?
  17. Android指南针陀螺仪开发
  18. 个人Tomcat复习篇
  19. 如何给老婆解释什么是Restful
  20. termux安装linux 并开机自动运行命令,自动进入系统

热门文章

  1. 如何准备校招技术面试+一只小菜鸟的面试之路
  2. 什么是Java 西安尚学堂
  3. 畅想未来计算机的绘画作品小学生,畅想未来儿童画绘画作品
  4. 奥比中光网络深度摄像头——人脸活体检测
  5. Linux内核转储---Kdump,Crash使用介绍
  6. MATLAB图形图像处理——图像灰度变换
  7. 【英语词组】恋恋不忘Day 3-4
  8. 花几分钟了解java中的final,何乐而不为呢
  9. pycharm如何修改字体大小和背景成护眼色
  10. android卸载保留数据,谷歌Android 10新特性:应用卸载时可保留数据