1.请求到SpringSecurity过滤器流程汇总图
1.请求发送到服务器端口,被tomcat监听到并转化为request,response
2.请求在tomcat中进入过滤器链ApplicationFilterChain
3.进入过滤器DelegatingFilterProxy(SpringSecurity创建并注入到过滤器链)
4.通过DelegatingFilterProxy持有的bean名称,从Spring容器中获取FilterChainProxy
5.FilterChainProxy 持有多条过滤器链SecurityFIlterChain,每条过滤器链可能包含一个或多个过滤器
6.FilterChainProxy根据request请求选择SecurityFilterChain并获取Filter集合
7.FilterChainProxy创建VirtualFilterChain,并注入6获取的Filter集合。进入SpringSecurity过滤器链执行流程。
2. SecurityContextHolder 结构图
SecurityContextHolder通过SecurityContextHolderStragedy来存储SecurityContext。
SecurityContext持有Authentication
Authentication持有GrantedAuthority,Credentials,Details,Principal
不同的认证方式有不同的Authentication实现类
不同的Authentication实现类由不同的AuthenticationManager进行认证
3.AuthenticationManager认证管理器
AuthenticationManager提供了认证功能,而其默认实现ProviderManager管理了一个AuthenticationProvider集合,它将具体的认证实现交给AuthenticationProvider。
4. AbstractAuthenticationProcessingFilter 认证处理器
通过attemptAuthentication钩子方法,各个子类通过AuthenticationManager来完成认证过程。
流程图:
5.FilterSecurityInterceptor之AccessDecisionManager授权体系图
FilterSecurityInterceptor通过AccessDecisionManager去决定url是否通行。
AccessDecisionManager通过AccessDecisionVoter去进行投票,然后根据获取的投票来决定是通过还是不通过。
体系图: