SpringBootSecurity学习(10)网页版登录之记住…

2019-10-08 09:05:23来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

SpringBootSecurity学习(10)网页版登录之记住我功能

场景

很多登录都有记住我这个功能,在用户登陆一次以后,系统会记住用户一段时间,在这段时间,用户不用反复登陆就可以使用我们的系统。记住用户功能的基本原理如下图:

file

用户登录的时候,请求发送给过滤器UsernamePasswordAuthenticationFilter,当该过滤器认证成功后,会调用RememberMeService,会生成一个token,将token写入到浏览器cookie,同时RememberMeService里边还有个TokenRepository,将token和用户信息写入到数据库中。这样当用户再次访问系统,访问某一个接口时,会经过一个RememberMeAuthenticationFilter的过滤器,他会读取cookie中的token,交给RememberService,RememberService会用TokenRepository根据token从数据库中查是否有记录,如果有记录会把用户名取出来,再调用UserDetailService根据用户名获取用户信息,然后放在SecurityContext里。

实现类

首先来实现操作token的类,实现增删改查功能,我们来使用redis保存,新建类RememberMeHandler,这个类需要实现接口 PersistentTokenRepository,首先来全局看一下类结构:

file

为了方便查询,我们在记住一个用户的时候,向redis中保存三条数据,其中两个是根据series查用户名和根据用户名查series。token定义的保存时长为15天,这两个定为30天。最下面的三个方法就是保存这两个key的方法和生成所有key的方法。四个重写的方法就是增删改查方法。首先来看新增:

file

需要记住用户的时候,把用户的信息组合在一起,添加到redis中,并定义15天的过期时间。然后看修改和删除:

file

都是对保存内容的正常操作,最后看查询:

file

记住用户之后,用户登录,查询出用户信息,实现自动认证。

网上有很多使用jdbc实现的方式,也是一种不错的选择。

配置记住我

在security配置类中,需要配置记住我的参数名字和处理类:

file

注意这里的授权配置要使用 authenticated() 。登录页面中增加记住我:

file

注意这里的参数名字 remember-me 是security记住我的默认名字。

测试

不勾选记住我,点击登录,redis中并没有记录token信息,勾选记住我,点击登录,可以看到记住我的信息记录在redis中:

file

我们启动项目,登录成功并勾选记住用户,然后重新启动项目,在同一个浏览器中访问页面,可以看到不用登录直接可以成功!

代码地址:https://gitee.com/blueses/spring-boot-security 10


原文链接:https://www.cnblogs.com/guos/p/11615448.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Spring框架学习笔记(3)——SpringMVC框架

下一篇:SpringBootSecurity学习(12)前后端分离版之简单登录