SpringSecurity rememberme功能实现过程解析

作者:天宇轩-王 时间:2021-12-20 05:22:08 

记住我功能原理分析

还记得前面咱们分析认证流程时,提到的记住我功能吗?

SpringSecurity rememberme功能实现过程解析

现在继续跟踪找到AbstractRememberMeServices对象的loginSuccess方法:

SpringSecurity rememberme功能实现过程解析

再点进去上面if判断中的rememberMeRequested方法,还在当前类中:

SpringSecurity rememberme功能实现过程解析

如果上面方法返回true,就表示页面勾选了记住我选项了。

继续顺着调用的方法找到PersistentTokenBasedRememberMeServices的onLoginSuccess方法:

SpringSecurity rememberme功能实现过程解析

注意name和value属性的值不要写错哦!

SpringSecurity rememberme功能实现过程解析

先测试一下,认证通过后,关掉浏览器,再次打开页面,发现还要认证!为什么没有起作用呢?
这是因为remember me功能使用的过滤器RememberMeAuthenticationFilter默认是不开启的!

开启remember me过滤器


<security:remember-me token-validity-seconds="60"></security:remember-me>

说明:RememberMeAuthenticationFilter * 能非常简单,会在打开浏览器时,自动判断是否认证,如果没有则
调用autoLogin进行自动认证。

SpringSecurity rememberme功能实现过程解析

remember me 安全性分析

记住我功能方便是大家看得见的,但是安全性却令人担忧。因为 Cookie毕竟是保存在客户端的,很容易盗取,而且
cookie的值还与用户名、密码这些敏感数据相关,虽然加密了,但是将敏感信息存在客户端,还是不太安全。那么
这就要提醒喜欢使用此功能的,用完网站要及时手动退出登录,清空认证信息。

此外,SpringSecurity还提供了remember me的另一种相对更安全的实现机制 :在客户端的cookie中,仅保存一个
无意义的加密串(与用户名、密码等敏感数据无关),然后在db中保存该加密串-用户信息的对应关系,自动登录
时,用cookie中的加密串,到db中验证,如果通过,自动登录才算通过。

持久化remember me信息

创建一张表,注意这张表的名称和字段都是固定的,不要修改。


<security:remember-me token-validity-seconds="60"
              data-source-ref="dataSource"
    remember-me-parameter="remember-me"></security:remember-me>

CREATE TABLE `persistent_logins` (
`username` varchar(64) NOT NULL,
`series` varchar(64) NOT NULL,
`token` varchar(64) NOT NULL,
`last_used` timestamp NOT NULL,
PRIMARY KEY (`series`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

SpringSecurity rememberme功能实现过程解析

来源:https://www.cnblogs.com/dalianpai/p/12378075.html

标签:Spring,Security,rememberme
0
投稿

猜你喜欢

  • java Springboot实现教务管理系统

    2023-01-18 00:28:12
  • springboot动态定时任务的实现方法示例

    2023-04-20 15:59:58
  • c语言字符数组与字符串的使用详解

    2023-12-23 18:40:33
  • 学习Winform分组类控件(Panel、groupBox、TabControl)

    2021-10-09 17:41:11
  • springboot使用单元测试实战

    2023-05-17 11:55:29
  • C#实现3步手动建DataGridView的方法

    2021-10-13 22:35:56
  • struts2简介_动力节点Java学院整理

    2023-06-24 02:04:07
  • Android Studio 3.6 layout文件text模式切换问题

    2022-10-06 11:28:32
  • android 添加随意拖动的桌面悬浮窗口

    2023-12-27 15:57:17
  • 使用Spring Cloud Feign远程调用的方法示例

    2021-12-06 10:30:09
  • android开发仿ios的UIScrollView实例代码

    2023-08-07 01:55:20
  • C#给Word不同页面设置不同背景

    2021-07-20 01:28:16
  • c#基于opencv,开发摄像头播放程序

    2023-06-20 11:54:29
  • Android中LayoutInflater.inflater()的正确打开方式

    2022-04-12 16:25:57
  • C#限速下载网络文件的方法实例

    2023-07-01 01:33:15
  • Android UI实现底部切换标签fragment

    2023-03-17 10:16:59
  • 详解Android的四大应用程序组件

    2023-05-23 02:00:32
  • Spring中实现定时调度的几种方法

    2021-08-29 13:04:44
  • C#中Equals方法的常见误解

    2023-03-10 21:59:23
  • Unity3D中脚本的执行顺序和编译顺序

    2023-11-07 01:50:31
  • asp之家 软件编程 m.aspxhome.com