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

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

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

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

这里写图片描述
实现

这里写图片描述

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

PersistentTokenBasedRememberMeservices
这里写图片描述

RemembermeAuthenticationFilter
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_36144258/article/details/79395013