SpringSecurity5 认证流程

SpringSecurity5 认证流程
双木老林回到序章
正文
以 spring-security5 提供的默认表单登陆为例,其大概流程如下:
- 终端发起登陆请求
- 认证过滤器
UsernamePasswordAuthenticationFilter拦截到请求,处理认证逻辑,在这里获得登陆信息,根据获得的登陆信息创建出未认证的Authentication( 这里对应的是UsernamePasswordAuthenticationToken对象 ),然后将对象交给认证管理器 - 认证管理器循环所有的
AuthenticationProvider,找到对应的 provider 进行认证
3.1. 认证管理器AuthenticationManager维护着许多AuthenticationProvider,这些AuthenticationProvider分别用来认证不同类型的请求,例如:表单、第三方 等 - 认证成功后,生成一个已认证的
Authentication,并将其通过SecurityContextHolder.getContext().setAuthentication(authResult);写到SecurityContext中
注: 以上部分其实很多都可以自定义实现扩展,不过这里不详说,后续如果有用到且有时间会作为附加篇进行补充。
相关源码定位
过滤
UsernamePasswordAuthenticationFilter
认证管理器匹配对应的 provider 进行认证
org.springframework.security.authentication.ProviderManager
provider 进行认证
org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider-authenticate
代码太长了,把代码精简过后大概如下:
1 | user = this.retrieveUser(username, (UsernamePasswordAuthenticationToken)authentication); |
获得用户信息
org.springframework.security.authentication.dao.DaoAuthenticationProvider-retrieveUser
获得 UserDetails
org.springframework.security.provisioning.InMemoryUserDetailsManager-loadUserByUsername
认证结束,该成功成功,该失败失败
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter
评论
匿名评论隐私政策


















