1. Authentication
表示用户的【认证信息】,在AuthenticationFilter 从 HttpRequest 中解析出用户的认证信息,并用它进行封装,其包括:
- Principal 是一个UserDetail类的实例,封装用户信息,如用户名,密码,是否过期等信息。
- Credentials (密码)
- Authorities (一个包括GrantedAuthority的集合)表示权限或角色,用于进行"鉴权"。
2. SecurityContext
存储用户【认证信息】的内存区,认证一旦被确认,此对象中将存储 Authentication 对象。
3. SecurityContextHolder
它是 SecurityContext 对象的”门面对象“,而此对象存储在 ThreadLocal 中,这表示你可以在同一个线程的任意方法中使用: SecurityContext context = SecurityContextHolder.getContext();
。
4. AuthenticationManager
它会从SecurityContext中获取 Authentication 进行 “认证”,通常情况下会使用它的一个子类(ProviderManager)对象完成此项工作,区别在于此对象存储了一个 AuthenticationProvider 的集合来完成认证。
image.png
5. AuthenticationProvider
它是被注入到 ProviderManager 管理的集合当中,有代表性的:DaoAuthenticationProvider 和JWTAuthenticationProvider。
6. AuthenticationEntryPoint
此对象被各Filter 所使用,作用在于产生 Http的响应,如重定向或产生响应头(WWW-Authenticate)。
7. AbstractAuthenticationProcessingFilter
它是用于“认证”的过滤器的基类,用于解析请求,封装Authentication,调用AuthenticationManager等一系的工作,常用类为:UsernamePasswordAuthenticationFilter类。
image.png
8. 调用流程:
当使用表单认证方式时:
UsernamePasswordAuthenticationFilter --> ProviderManager --> DaoAuthenticationProvider -> IOC容器中的 UserDetailService,在此完成认证,并根据认证的结果完成以下调用:
A. 失败流程:
image.png
B. 成功流程:
image.png
网友评论