Spring Security 记住我功能原理以及实现

用户名登陆的案例
实现“记住我” 功能
在用户登陆一次以后,系统会记住用户一段时间,在这段时间,用户不用反复登陆就可以使用我们的系统。

记住我功能的基本原理
这里写图片描述

用户发送请求到UsernamePasswordAuthenticationFilter,当用户认证成功以后,会调一个RemeberMeService这样一个服务。这个服务里面有一个TokenRepository,会生成一个Token,将这个Token写入到浏览器的Cookie里面,同时TokenRepository把生成的Token写入到数据库里面(还有用户名)。过了一天用户来访问系统 就不需要登陆了,直接访问某一个受保护的服务,这个请求在经过过滤器链的时候会经过RemberMeAuenticationFilter(读取Cookie中的Token)给RemberMeService,RemberMeService会根据Token到数据库里面去查。如果有记录,就会把Username用户名取出来,取出来之后会调用UserDetailsService,获取用户信息,然后把用户信息放入到SecurityContext里面。

这里写图片描述
实现

这里写图片描述

这里写图片描述
源码解析:
登陆成功后的一个认证处理,在AbstracAuthenticationProcessingFilter
这里写图片描述

PersistentTokenBasedRememberMeservices
这里写图片描述

RemembermeAuthenticationFilter
这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值