1.SpringSecurity整体架构
AccessDecisionManager则是负责授权的接口
AuthenticationManager是负责认证的接口认证。认证成功的信息主要是由 Authentication 的实现类进行保存的,其接口定义为: AuthenticationManager 主要实现类为 ProviderManager,在 ProviderManager 中管理了众多 AuthenticationProvider 实例
SecurityContextHolder 用来获取登录之后用户信息,Spring Security 会将登录用户数据保存在 Session ,是通过ThreadLocal 来实现的,当登录请求处理完毕后,Spring Security 会将 SecurityContextHolder 中的数据拿出来保存到 Session 中,同时将 SecurityContexHolder 中的数据清空。
2.为什么引入 Spring Security 所以请求就要被拦截呢?
原因是Springboot自动化配置,会自动引入一系列的FilterChain,具体查看WebSecurityConfiguration的源码
FilterChain
Spring Security 提供了 30 多个过滤器 ,默认情况下Spring Boot 在对 Spring Security 进入自动化配置时,会创建一个名为 SpringSecurityFilerChain 的过滤器,并注入到 Spring 容器中,这个过滤器将负责所有的安全管理,包括用户认证、授权、重定向到登录页面等。
需要注意的是,默认过滤器并不是直接放在 Web 项目的原生过滤器链中,而是通过一个FlterChainProxy 来统一管理。Spring Security 中的过滤器链通过 FilterChainProxy 嵌入到 Web项目的原生过滤器链中。FilterChainProxy 作为一个顶层的管理者,将统一管理 Security Filter。FilterChainProxy 本身是通过 Spring 框架提供的 DelegatingFilterProxy 整合到原生的过滤器链中。
自动化配置(具体查看Springbootwebsecurityconfiguration源码)
所以当要使用自定义的配置时只需要继承websecurityconfigureradater重写configure方法