SpringSecurity rememberme功能实现过程解析

 更新时间:2020年03月03日 14:37:51   作者:天宇轩-王  
这篇文章主要介绍了SpringSecurity rememberme功能实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

记住我功能原理分析

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

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

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

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

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

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

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

开启remember me过滤器

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java Socket实现简易聊天室

    Java Socket实现简易聊天室

    这篇文章主要为大家详细介绍了Java Socket实现简易聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • 详解Java编程中throw和throws子句的使用方法

    详解Java编程中throw和throws子句的使用方法

    这篇文章主要介绍了详解Java编程中throw和throws子句的使用方法,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • java jdk1.8 使用stream流进行list 分组归类操作

    java jdk1.8 使用stream流进行list 分组归类操作

    这篇文章主要介绍了java jdk1.8 使用stream流进行list 分组归类操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Java Servlet响应httpServletResponse过程详解

    Java Servlet响应httpServletResponse过程详解

    HttpServletResponse是处理http响应的对象,调用该对象的方法,设置到对象属性的内容,tomcat最终会组织为http响应报文
    2022-02-02
  • Java文件字符输入流FileReader读取txt文件乱码的解决

    Java文件字符输入流FileReader读取txt文件乱码的解决

    这篇文章主要介绍了Java文件字符输入流FileReader读取txt文件乱码的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 在IntelliJ IDEA中.idea文件是什么可以删除吗

    在IntelliJ IDEA中.idea文件是什么可以删除吗

    相信有很多小伙伴,在用idea写java代码的时候,创建工程总是会出现.idea文件,该文件也从来没去打开使用过,那么它在我们项目里面,扮演什么角色,到底能不能删除它呢?这篇文章主要介绍了在IntelliJ IDEA中.idea文件是什么可以删除吗,需要的朋友可以参考下
    2024-01-01
  • mybatis example如何自动生成代码 排序语句

    mybatis example如何自动生成代码 排序语句

    这篇文章主要介绍了mybatis example如何自动生成代码 排序语句,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Boot整合流控组件Sentinel的场景分析

    Spring Boot整合流控组件Sentinel的场景分析

    Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑,这篇文章主要介绍了Spring Boot整合流控组件Sentinel的过程解析,需要的朋友可以参考下
    2021-12-12
  • 零基础搭建boot+MybatisPlus的详细教程

    零基础搭建boot+MybatisPlus的详细教程

    这篇文章主要介绍了零基础搭建boot+MybatisPlus,首先需要创建数据库表和创建boot项目使用mybatisplus操作数据库,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • Java实现顺序表和链表结构

    Java实现顺序表和链表结构

    大家好,本篇文章主要讲的是Java实现顺序表和链表结构,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02

最新评论