springsecurity密码登录的流程分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springsecurity密码登录的流程分析相关的知识,希望对你有一定的参考价值。

参考技术A 一、用户名密码登录处理过程(spring security实现的处理流程):

1.密码登录的请求会进入一个叫做UsernamePasswordAuthenticationFilter的过滤器
2.这个过滤器会拿到用户名和密码组装成UsernamePasswordAuthenticationToken这样一个对象
3.然后过滤器把这个token对象传给AuthenticationManager
4.AuthenticationManager会在一堆AuthenticationProvider中挑出一个处理认证请求
这个挑选的依据是:这个authenticationProvider中有一个supports()方法会判断当前这个provider是否支持传进来的UsernamePasswordAuthenticationToken,如果支持,就用当前的Provider来认证这个token。
5.在认证的过程中会调UserDetailsService来获取用户的信息,跟传进来的登录信息进行比对,如果认证通过会把UsernamePasswordAuthenticationToken 做一个标志,标记为已认证放进session中。

二、手机号验证码登录处理过程:(spring security没有实现,应该我们自己去仿照用户名密码登录去实现)

1.短信验证码登录的请求进入我们自己写的SmsAuthenticationFilter过滤器
2.这个过滤器会从请求中拿到手机号封装成一个SmsAuthenticationToken这样一个对象
3然后过滤器会把这个token传给系统中唯一的AuthenticationManager
4.AuthenticationManager还是会检索系统中的所有的AuthenticationProvider,这里我们要实现一个SmsAuthenticationProvider,
用这个provider来检索token中的手机号。
5.这个过程中还是会调用UserDetailsService来获取用户信息,来跟登录信息进行比对,如果认证通过会把SmsAuthenticationToken 标志为已认证,放进session中。

注意:为什么验证短信验证码的逻辑不像用户名密码的验证逻辑写在DaoAuthenticationProvider一样写在SmsAuthenticationProvider中呢?主要是因为我们想要重用这个短信验证,例如支付的时候需要短信验证,所以我们单独写一个过滤器来实现短信验证码的功能,放在SmsAuthenticationFilter之前。

以上是关于springsecurity密码登录的流程分析的主要内容,如果未能解决你的问题,请参考以下文章

SpringSecurity-9-实现通过手机短信进行认证功能

SpringSecurity 完整认证流程

springsecurity如何保存重定向地址

《SpringSecurity框架专题》-04认证流程分析

spring security实现记住我下次自动登录功能

Spring Security 自定义拦截器Filter实现登录认证