SpringSecurity - RememberMe

SpringSecurity 记住我原理:

一、创建token

 进入UsernamePasswordAuthticationFilter进行用户信息验证,验证成功之后它会调用一个AbstractAuthenticationProcessingFilter的过滤器进入一个successfulAuthentication方法中将用户的信息存入session中,然后调用RememberService调用loginSuccess方法,在这个方法中它又会调用rememberMeRequested方法,这个方法返回一个Boolean值,判断是否设置好RemeberMe这个功能。在rememberMeRequested这个方法中它会获取登录页面传送过来的remember-me这个参数,因为我们设置了value=”true”,因此它不为空并且该方法返回true。

 接着:

其中 parameter 默认为  remember-me

TokenRepository将Token存入数据库中,并且将Token存入cookie中。在TokenRepository中调用我们上面实现的JdbcTokenRepositoryImpl bean的createNewToken方法内部实际上使用JdbcTemplate在更新数据库插入了当前Token。

在存入cookie是读取设置的过期参数,然后创建一个cookie通过response响应到浏览器存入cookie中。

 

 二、验证token

看一下RememberMeAuthenticationFilter 位置:

当我们重新启动项目访问页面时,由于session被销毁,但是cookie中存在Token,它会到RememberMeAuthenticationFilter中读取session中的值,由于是重启项目,session被销毁,因此session为空,它会去到cookie中取是否存在Token,遍历cookie获取到RememberMe的Token,然后根据Token获取用户信息返回调用的URL信息。

 

 检查cookie中有无 remember-me 参数:

 有该参数的话,则解密该参数的值,然后 去数据库取出该token对应的信息,判断有无过期,校验通过

 

 上面就是Spring Security实现RemeberMe功能的原理,关键是掌握功能的原理图,然后查看源码即可清楚的理解它的流程。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值