前言
本节内容主要介绍spring securtity的初始化启动流程,spring security是通过@EnableWebSecurity注解来启用的,在@EnableWebSecurity注解中主要引入了WebSecurityConfiguration、SpringWebMvcImportSelector、OAuth2ImportSelector、HttpSecurityConfiguration四大组件来完成spring securtity安全框架的初始化。我们这里会主要着重介绍WebSecurityConfiguration组件和HttpSecurityConfiguration组件,这俩个组件是完成spring security的初始化启动的核心组件。
正文
@EnableWebSecurity注解中会启用四大初始化组件
WebSecurityConfiguration:核心是加载spring securtity的过滤器链springSecurityFilterChain
SpringWebMvcImportSelector:在spring中启动web mvc功能
OAuth2ImportSelector:是用于启用 OAuth2 认证和授权功能
HttpSecurityConfiguration:配置安全规则、访问权限、认证方式等
WebSecurityConfiguration组件分析
①创建一个后置处理器RsaKeyConversionServicePostProcessor的bean对象,用于加密
②创建一个DelegatingApplicationListener监听器,用于将该事件委托于其它监听器处理
③这里主要是初始化SecurityFilterChain中的过滤器,默认有14个
④创建一个AutowiredWebSecurityConfigurersIgnoreParents,自动装配自己的Web 安全配置,不受父容器的影响
⑤注入setFilterChainProxySecurityConfigurer组件,用于初始化SecurityConfigurer和webSecurity
⑥初始化springSecurityFilterChain过滤器链,用于处理web请求的安全认证
⑦创建SecurityExpressionHandler处理器,用于在访问控制表达式中处理安全性表达式,主要用来实现权限授权的处理
HttpSecurityConfiguration组件分析
①创建一个HttpSecurity对象,用于定义Web 应用程序的安全性规则,这里会使用一些默认配置
②初始化一个认证管理器,默认是内存级别的,一般使用的会使用数据库的方式
SecurityFilterAutoConfiguration配置类分析
如果容器中存在springSecurityFilterChain过滤器,将该过滤器链注册到DelegatingFilterProxyRegistrationBean这个代理注册器Bean中,方便后续取用
DelegatingFilterProxyRegistrationBean代理注册器分析
①在web容器启动后,会初始化ServletContext的上下文对象
②在初始化上下文时,会调用DelegatingFilterProxyRegistrationBean代理注册器的getFilter()方法,初始化创建DelegatingFilterProxy对象,并将springSecurityFilterChain的bean名称传给DelegatingFilterProxy过滤器代理类
DelegatingFilterProxy 分析
①获取springSecurityFilterChain的bean对象,
②将Spring Security的过滤器委派给此Bean处理
③调用spring security 委派的代理过滤器FilterChainProxy
④获取spring security过滤器
⑤挨个执行spring security过滤器的doFilter方法
结语
关于spring securtity安全框架原理之启动流程的内容到这里就结束了,我们下期见。。。。。。