在之前章节只是分析过滤器,并没有仔细地去分析认证这一块。现在我们来仔细分析一下认证详细流程。
认证时序图
UsernamePasswordAuthenticationFilter
过滤器会调用 attemptAuthentication
方法进行认证。在 attemptAuthentication
方法内部会根据传递进来的 username
和 password
封装成 UsernamePasswordAuthenticationToken
对象,并由 AuthenticationManager
管理器调用 authenticate
方法进行认证。AuthenticationManager
管理器会把具体认证工作委派给 ProviderManager
。由 ProviderManager
类来完成加载用户信息、检查用户状态、密码比对等等,如果认证成功,会生产 Authentication
对象并返回。大致的时序图如下所示。
AuthenticationProvider
AuthenticationProvider
的实现类才是真正执行完成认证逻辑的地方,多个 AuthenticationProvider
可以被注入到 ProviderManager
类中。每个 Authent