14.Spring Security应用详解-工作原理-认证流程
2020-03-23 本文已影响0人
LANSHENGYANG
认证流程
image让我们仔细分析认证过程:
- 1.用户提交用户名,密码被SecurityFilterChain中的
UsernamePasswordAuthenticationFilter
过滤器获取到,封装为请求Authentication,通常情况下是UsernamePasswordAuthenticationToken这个实现类。 - 2.然后过滤器将Authentication提交至认证管理器(AuthenticationManager)进行认证
- 3.认证成功后,
AuthenticationManager
身份管理器返回一个被填充满了信息的(包括上面提交到的权限信息,身份信息,细节信息,但密码通常会被移除)Authenticatio
n实例。 - 4.SecurityContextHolder安全上下文容器将第3步填充了信息的Authentication。通过SecurityContextHolder.getContext().setAuthentication(...)方法,设置到其中。
可以看出AuthenticationManager(认证管理器)是认证相关的核心接口,也是发起认证的出发点,它的实现类为ProviderManager。而Spring Security支持多种认证方式,因此ProviderManager维护着一个List<AuthenticationProvider>列表,存放多种认证方式,最终实际的认证工作是由AuthenticationProvider完成的。咱们知道web表单的对应的AuthenticationProvider实现类为DaoAuthenticationProvider将UserDetails填充至Authentication。