Spring Security 认证执行流程(基于源码进行分析)

it2025-06-15  13

**Spring Security 认证执行流程(基于源码进行分析)**

当浏览器发送登录请求时,会被FilterChainProxy拦截,他会将请求发送到SecurityContextPersistenceFilter,这个filter会从SecurityContextRepository中获取SecurityContext对象,然后将SecurityContext对象设置给SecurityContextHolder中 此时SecurityContextPersistenceFilter告一段落,然后FilterChain会调用UsernamePasswordAuthenticationFilter,UsernamePasswordAuthenticationFilter会从请求中将账户名和密码封装成token,然后将此token交给AuthentiactionManager,AuthenticationManager调用AuthenticationProvider.authenticate()方法执行认证,在这个方法中有多个provider(认证实例方法)进行认证,将token交给DaoAuthenticationProvider进行认证,DaoAuthenticationProvider会从传入的token中获取username,根据username在UserDetailsService中获取UserDetail对象(UserDetailsService,会根据传入的username在数据库中进行查找,将查询到的数据封装成UserDetail对象进行返回),这样DaoAuthenticationProvider中有前台传入的数据封装成的token对象和调用UserDetailsService根据username在数据库中查询到的数据封装成的UserDetail对象,然后执行PasswordEncoder方法进行比对,比对成功后将成功认证信息返回给DaoAuthenticationProvider DaoAuthenticationProvider将认证信息进行返回 ** AuthentiactionManager,AuthentiactionManager将认证信息封装成一个UsernamePasswordAuthenticationToken返回给UsernamePasswordAuthenticationFilter**,UsernamePasswordAuthenticationFilter将Authentication对象通过SecurityContextHodler设置进SecurityContext中,然后SecurityContextPersistenceFilter从SecurityContextHodler中取出SecurityContext,存储到SecurityContextRepository中,然后清空SecurityContextHodler。

总体流程 认证流程

最新回复(0)