Spring Security @EnableWebSecurity 注解原理分析

1.@EnableWebSecurity
2.@Import(WebSecurityConfiguration)
3.WebSecurityConfiguration是一个配置类@Configuration
4.进入@AutoWired方法:从容器中获取ObjectBeanProcessor和WebSecurityConfigurer的实现类(一般都是去继承WebSecurityConfigurerAdapter)
5.根据ObjectBeanProcessor创建WebSecurity
6.将容器中的WebSecurityConfigurer遍历apply,即添加到WebSecurity中
7.进入@Bean标注方法:创建一个BeanName为SpringSecurityFilterChain的Filter实现类FilterChainProxy(继承GenericFilterBean)
===FilterChainProxy==处理逻辑
FilterChainProxy中有一个属性是List<SecurityFilterChain> filterChains,里面存储了多个DefaultSecurityFilterChain实例
FilterChainProxy的doFilter方法会遍历filterChains集合,使用SecurityFilterChain接口的RequestMatcher匹配器进行匹配
匹配到了会创建一个FilterChainProxy的内部类VirtualFilterChain,然后调用虚拟过滤器链的doFilter方法
执行完VirtualFilterChain中的Filters后执行原来的过滤器链
===FilterChainProxy==处理逻辑
8.执行WebSecurity的build方法,该方法是一个模板方法定义在AbstractSecurityBuilder中
9.进入AbstractSecurityBuilder的build方法,有一个cas实现多线程安全,执行模板方法doBuild方法
10.进入AbstractConfiguredSecurityBuilder的doBuild方法,执行init方法,执行configure方法执行performBuild返回Filter
11.进入AbstractConfiguredSecurityBuilder的init方法进行遍历WebSecurityConfigurer实现类的init(webSecurity)方法
12.进入WebSecurityConfigurer实现类的init(WebSecurity)方法,执行getHttp()获取HttpSecurity对象
13.执行addSecurityFilterChainBuilder方法将HttpSecurity对象设置进去,添加FilterSecurityInterceptor
14.getHttp()方法中创建了HttpSecurity对象,配置一些配置器(这些配置器是用来生成SecurityFilterChain中的Filter的)
15.getHttp()方法中执行WebSecurityConfigurerAdapter的configure(HttpSecurity),(使用者自定义扩展点)
16.进入AbstractConfiguredSecurityBuilder的configure方法遍历WebSecurityConfigurer实现类的configure(webSecurity)方法(使用者自定义扩展点)
17.进入AbstractConfiguredSecurityBuilder的performBuild方法,获取IgnoreRquest和SecurityFilterChainBuilder的个数总和
18.根据个数总和作为集合容量大小创建SecurityFilterChain集合
19.遍历每个ignoreRquest创建DefaultSecurityFilterChain,RequestMatcher都是AntPathRequestMatcher
20.遍历每个SecurityFilterChainBuilder(即HttpSecurity实例)的build方法
21.根据SecurityFilterChain集合创建FilterChainProxy实例,调用FilterChainProxy的初始化方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值