Spring Security(5)
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~
经常上网的人都应该有这样的体验:很多网站或者APP只需要第一次登录时输入用户名和密码之后,后面很长一段时间内就不需要再次输入密码了。这确实是一个非常好的体验,不然每次都让人输用户名和密码就太麻烦了。
Spring Security也提供了这样的功能,也就是Remember-Me(记住我)。
要实现这个功能也异常简单:只需要稍稍修改一下WebSecurityConfiguration即可:
// 控制逻辑
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
// 设置自定义认证成功、失败及登出处理器
.and().formLogin().loginPage("/login")
.successHandler(successHandler).failureHandler(failureHandler).permitAll()
.and().logout().logoutUrl("/logout").deleteCookies("JSESSIONID")
.logoutSuccessHandler(logoutSuccessHandler).permitAll()
// 配置无权访问的自定义处理器
.and().exceptionHandling().accessDeniedHandler(accessDeniedHandler)
// 记住我
.and().rememberMe()
.and()
.cors().and().csrf().disable();
}
在postman的参数中增加remember-me参数,并设为true再访问就行了:
结果也很清楚:
虽然用cookie实现记住我很方便,但是如果涉及到敏感信息的话,cookie太过简单满足不了需求。所以,Spring Security提供了另外一种实现机制:保存到数据库中。也就是自动登录时,用cookie中的加密串到数据库中验证,如果通过,自动登录才算成功。使用这种方式实现remember-me很简单,只需要在WebSecurityConfiguration中增加一段代码就行了:
// 控制逻辑
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
// 设置自定义认证成功、失败及登出处理器
.and().formLogin().loginPage("/login")
.successHandler(successHandler).failureHandler(failureHandler).permitAll()
.and().logout().logoutUrl("/logout").deleteCookies("JSESSIONID")
.logoutSuccessHandler(logoutSuccessHandler).permitAll()
// 配置无权访问的自定义处理器
.and().exceptionHandling().accessDeniedHandler(accessDeniedHandler)
// 记住我
.and().rememberMe()
// 数据库保存,这种方式在关闭服务之后仍然有效
.tokenRepository(persistentTokenRepository())
// 默认的失效时间会从用户最后一次操作开始计算过期时间,过期时间最小值就是60秒,
// 如果设置的值小于60秒,也会被更改为60秒
.tokenValiditySeconds(30 * 24 * 60 * 60)
.and()
.cors().and().csrf().disable();
}
因为需要在数据库中保存,那么自然就需要创建相应的数据库表:
同样,在WebSecurityConfiguration中再加入如下代码(需要注意的是,datasource是不能够通过连接池得到的,这里连接池注入的是javax.sql.DataSource):
// 如果使用hikariCP这里就无法注入DataSource
@Autowired
private DataSource dataSource; // MySQL方式实现记住我
@Bean
public PersistentTokenRepository persistentTokenRepository() {
// mysql方式
JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl();
// 需要给JdbcTokenRepositoryImpl注入一个数据源,实现CRUD
tokenRepository.setDataSource(dataSource);
return tokenRepository;
}
这样就可以了,然后运行postman进行测试。
可以看到,由于是60秒失效,因此在第一次访问60秒后,再调用同样的接口时,名称为remember-me的cookie消失了。数据库的persistent_logins表中也多了一条用户访问记录。
失效规律:
1、过期时间的最小值是60秒,如果设置的值小于60秒,也会被更改为60秒;
2、默认的失效时间会从用户最后一次操作开始计算过期时间。
MySQL虽然方便,但是一般MySQL是用来保存主要业务数据的,这种技术性的数据最好不要和业务混在一起。所以,下一次就来说说怎么用NoSQL实现记住我。
感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~
Spring Security(5)的更多相关文章
- Spring Security(08)——intercept-url配置
http://elim.iteye.com/blog/2161056 Spring Security(08)--intercept-url配置 博客分类: spring Security Spring ...
- Spring Security(三)
Spring Security(三) 个性化用户认证流程 自定义登录页面 在配置类中指定登录页面和接收登录的 url @Configuration public class BrowserSecuri ...
- Spring Security(二)
Spring Security(二) 注:凡是源码部分,我已经把英文注释去掉了,有兴趣的同学可以在自己项目里进去看看.:-) 定义用户认证逻辑 用户登录成功后,用户的信息会被 Security 封装在 ...
- Spring Security(一)
Spring Security(一) 基本原理 前言 Spring Security核心功能 认证(你是谁) 授权(你能干什么) 攻击防护(防止伪造身份) Srping Security基本原理 项目 ...
- 【权限管理系统】Spring security(三)---认证过程(原理解析,demo)
在前面两节Spring security (一)架构框架-Component.Service.Filter分析和Spring Security(二)--WebSecurityConfigurer配 ...
- SpringBoot集成Spring Security(7)——认证流程
文章目录 一.认证流程 二.多个请求共享认证信息 三.获取用户认证信息 在前面的六章中,介绍了 Spring Security 的基础使用,在继续深入向下的学习前,有必要理解清楚 Spring Sec ...
- SpringBoot集成Spring Security(6)——登录管理
文章目录 一.自定义认证成功.失败处理 1.1 CustomAuthenticationSuccessHandler 1.2 CustomAuthenticationFailureHandler 1. ...
- SpringBoot集成Spring Security(5)——权限控制
在第一篇中,我们说过,用户<–>角色<–>权限三层中,暂时不考虑权限,在这一篇,是时候把它完成了. 为了方便演示,这里的权限只是对角色赋予权限,也就是说同一个角色的用户,权限是 ...
- SpringBoot集成Spring Security(4)——自定义表单登录
通过前面三篇文章,你应该大致了解了 Spring Security 的流程.你应该发现了,真正的 login 请求是由 Spring Security 帮我们处理的,那么我们如何实现自定义表单登录呢, ...
- SpringBoot集成Spring Security(2)——自动登录
在上一章:SpringBoot集成Spring Security(1)——入门程序中,我们实现了入门程序,本篇为该程序加上自动登录的功能. 文章目录 一.修改login.html二.两种实现方式 2. ...
随机推荐
- flink-cdc实时同步mysql数据到elasticsearch
本文首发于我的个人博客网站 等待下一个秋-Flink 什么是CDC? CDC是(Change Data Capture 变更数据获取)的简称.核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的 ...
- 坚守自主创新,璞华HawkEye IETM系统惠及国计民生
可上九天揽月,可下五洋捉鳖,这是我们很多年的梦想.而要实现这样的梦想,不仅需要安全可靠的技术装备,还需要让这些技术装备处于良好的维保状态.于是,作为装备维保过程中必须的知识创作.管理.发布.浏览工具, ...
- docker-compose安装harbor
目录 Harbor 安装环境说明 获取安装包(离线安装方式) 安装harbor 用docker-compose查看Harbor容器的运行状态 Harbor访问测试 上传镜像到Harbor服务器 Har ...
- PAT乙级 1024 科学计数法
思路 1.尝试失败:一开始想打算把结果直接存在一个字符串中,后来发现当指数大于0的时候还需要分别考虑两种情况,工程量巨大,尝试失败,于是借鉴了其他大佬思路,写出了ac代码 2.ac思路:首先取指数的绝 ...
- C#/VB.NET 读取条码类型及条码在图片中的坐标位置
我们在创建条形码时,如果以图片的方式将创建好的条码保存到指定文件夹路径,可以在程序中直接加载图片使用:已生成的条码图片,需要通过读取图片中的条码信息,如条码类型.条码绘制区域在图片中的四个顶点坐标位置 ...
- [题解] Atcoder Beginner Contest ABC 270 G Ex 题解
点我看题 G - Sequence in mod P 稍微观察一下就会发现,进行x次操作后的结果是\(A^xS+(1+\cdots +A^{x-1})B\).如果没有右边那一坨关于B的东西,那我们要求 ...
- SpringBoot课程学习(一)
@SpringBootTest指定测试的启动类 声明@SpringBootTest @Test注解 @Test 指定测试方法 @Order排序 一:先声明排序模式 @TestMethodOrder(M ...
- 谣言检测(PLAN)——《Interpretable Rumor Detection in Microblogs by Attending to User Interactions》
论文信息 论文标题:Interpretable Rumor Detection in Microblogs by Attending to User Interactions论文作者:Ling Min ...
- SpringMVC访问不到默认页的问题。
在web.xml中配置了 <welcome-file-list> <welcome-file>index.html</welcome-file> </welc ...
- Linux自动切换用户
Linux自动切换用户 一.创建sh文件 touch su_user.sh 二.下载脚本 yum install -y expect 三.脚本内容 #!/bin/bash# This is our f ...