记住我

我们的网站还有一个重要的功能,就是记住我,也就是说我们可以在登陆之后的一段时间内,无需再次输入账号和密码进行登陆,相当于服务端已经记住当前用户,再次访问时就可以免登陆进入,这是一个非常常用的功能。

我们之前在JavaWeb阶段,使用本地Cookie存储的方式实现了记住我功能,但是这种方式并不安全,同时在代码编写上也比较麻烦,那么能否有一种更加高效的记住我功能实现呢?

SpringSecurity为我们提供了一种优秀的实现,它为每个已经登陆的浏览器分配一个携带Token的Cookie,并且此Cookie默认会被保留14天,只要我们不清理浏览器的Cookie,那么下次携带此Cookie访问服务器将无需登陆,直接继续使用之前登陆的身份,这样显然比我们之前的写法更加简便。并且我们需要进行简单配置,即可开启记住我功能:

.and()
.rememberMe()   //开启记住我功能
.rememberMeParameter("remember")  //登陆请求表单中需要携带的参数,如果携带,那么本次登陆会被记住
.tokenRepository(new InMemoryTokenRepositoryImpl())  //这里使用的是直接在内存中保存的TokenRepository实现//TokenRepository有很多种实现,InMemoryTokenRepositoryImpl直接基于Map实现的,缺点就是占内存、服务器重启后记住我功能将失效//后面我们还会讲解如何使用数据库来持久化保存Token信息

接着我们需要在前端修改一下记住我勾选框的名称,将名称修改与上面一致,如果上面没有配置名称,那么默认使用"remember-me"作为名称:

<input type="checkbox" name="remember" class="ad-checkbox">

现在我们启动服务器,在登陆时勾选记住我勾选框,观察Cookie的变化。

虽然现在已经可以实现记住我功能了,但是还有一定的缺陷,如果服务器重新启动(因为Token信息全部存在HashMap中,也就是存在内存中),那么所有记录的Token信息将全部丢失,这时即使浏览器携带了之前的Token也无法恢复之前登陆的身份。

我们可以将Token信息记录全部存放到数据库中(学习了Redis之后还可以放到Redis服务器中)利用数据库的持久化存储机制,即使服务器重新启动,所有的Token信息也不会丢失,配置数据库存储也很简单:

@Resource
PersistentTokenRepository repository;@Bean
public PersistentTokenRepository jdbcRepository(@Autowired DataSource dataSource){JdbcTokenRepositoryImpl repository = new JdbcTokenRepositoryImpl();  //使用基于JDBC的实现repository.setDataSource(dataSource);   //配置数据源repository.setCreateTableOnStartup(true);   //启动时自动创建用于存储Token的表(建议第一次启动之后删除该行)return repository;
}
.and()
.rememberMe()
.rememberMeParameter("remember")
.tokenRepository(repository)
.tokenValiditySeconds(60 * 60 * 24 * 7)  //Token的有效时间(秒)默认为14天

稍后服务器启动我们可以观察一下数据库,如果出现名为persistent_logins的表,那么证明配置没有问题。

当我们登陆并勾选了记住我之后,那么数据库中会新增一条Token记录。

SpringSecurity基础:记住我相关推荐

  1. SpringSecurity - 基础篇

    文章目录 一.SpringSecurity能做什么 二.SpringSecurity替代方案 三.权限管理中的相关概念 四.SpringSecurity 入门案例 前言:通常我们写http接口是不会用 ...

  2. 【spring-security基础】基于数据库的认证方式

    通过查询数据库方式进行认证 核心要点 实现思路 1. 数据库设计 2. 框架依赖引入(操作数据库) 3. 创建操作数据库相关内容 4. [重点]实现UserDetailsService接口 5. 配置 ...

  3. SpringSecurity实现记住我功能

    ⒈表单添加 1 <form action="/authentication/form" method="post"> 2 <table> ...

  4. SpringSecurity中“记住我”功能使用及介绍

    RememberMe 1.简介 Remember这个功能非常常见,下图就是QQ邮箱登录时的"记住我"选项.提到RememberMe,一些初学者往往会有一些误解,认为Remember ...

  5. 五.SpringSecurity基础-授权流程

    1.授权流程分析 授权一定是在认证通过之后,授权流程是通过FilterSecurityInterceptor拦截器来完成,FilterSecurityInterceptor通过调用SecurityMe ...

  6. SpringSecurity基础:自定义登录和登出

    自定义登录界面 前面我们已经了解了如何实现数据库权限验证,那么现在我们接着来看看,如何将登陆页面修改为我们自定义的样式. 首先我们要了解一下SpringSecurity是如何进行登陆验证的,我们可以观 ...

  7. SpringSecurity

    SpringSecurity SpringSecurity概述 SpringSecurity编程起步 CSRF访问控制 扩展登录和注销功能 获取认证与授权信息用户认证成功后 基于数据库实现用户登录 基 ...

  8. 我的面试标准:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架!...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:hsm_computer www.cnblogs.com/J ...

  9. A092_SpringSecurity

    目录 一.认证与授权-新手上路 1.认证授权概述 1.1.什么是认证 1.2.什么是授权 1.3.什么是RBAC 2.基于session的认证授权 2.1.认证流程和认证检查 2.2.授权流程 3.基 ...

最新文章

  1. servlet的 session什么时候用_抖音什么时候用dou+
  2. 【Java】6.1 Java 8增强的包装类
  3. ABAP 7.53 中的ABAP SQL(原Open SQL)新特性
  4. LiveVideoStack冬季招聘(高级策划编辑,市场BD主管)
  5. 两路语音 两路计算机数据综合,脉冲编码调制解调实验摘要.doc
  6. TCP报文段的首部格式
  7. 微信小程序云开发教程-JavaScript入门(4)-捕捉异常
  8. ios富文本的简单使用 AttributedString
  9. 菜鸟谷歌浏览器打印组件技术分析
  10. 日月神话_功能色彩神话
  11. EAGLE layout 拼板方法
  12. FTP上传失败报错解决
  13. Flink 1.10之改进的TaskManager内存模型与配置/taskmanager.memory.network.fraction
  14. 视频压缩 I P B 帧 详解
  15. java实现面向对象的23种设计模式【超长预警,读完超过2小时】
  16. 微信小程序存在的风险_警惕,你的微信小程序可能面临着风险!
  17. (PTA)数据结构(作业)5、堆栈
  18. Python 3 邂逅 AI 工程师
  19. Android PowerManager 进入屏保、睡眠的过程梳理
  20. 有趣的Hack-A-Sat黑掉卫星挑战赛——卫星平台内存dump

热门文章

  1. C语言 fopen和fread函数解析
  2. glew和glfw区别
  3. 推荐测试耳机品质的专业网站
  4. ict测试机台_ICTFCT自动测试机 PTI-2000L 深圳市派捷电子科技有限公司
  5. chrome 解决本地加载图片提示Mixed Content
  6. 【开发工具】PacketTracer
  7. 快速控制原型RCP和硬件在环HIL
  8. 7月视灯视频号榜单:更替率59.4%,央视新闻居首;萌宠、美妆市场空白,母婴、旅行前景广阔;视频号直播多项更新强化社交和私域价值
  9. 字幕组和压制组装机必备资源清单
  10. 华南理工大学计算机与科学毕业难不,华南理工大学计算机学院的什么专业最好?录取分数是多少?...