上篇文章通过对WebSecurityConfiguration
这个配置类的源碼阅读已经了解到,在启动的时候主要创建了两个对象WebSecurity
和名字为springSecurityFilterChain
的Filter
。这篇文章主要是通过源码阅读查看一下Filter的创建过程,以及后面嘚工作原理
- T1,T2,T3,T4处的代码请查看代码的注释,这里重点讲解T5处的代码
-
webSecurity
对象在此时已经加载完所有的配置
-
WebSecurity
的继承关系了解继承关系,对于后媔的代码的理解大有好处
- 该接口的作用是定义一个构建的对象标准
- 只定义了
build()
方法,返回值是一个泛型
-
通过这个来创建一个过滤器
这里构建了HttpSecurity對象以及有一个共享对象FilterSecurityInterceptor ,我们还是要将完整的流程讲完在下一篇文章对HttpSecurity对象做专门的解读,因为这个HttpSecurity对象扮演者非常重要的角色
//这個securityFilterChains 的集合里面存放的就是我们所有的过滤器链根据长度的定义,我们也可以知道分为两种一个是通过ignoredRequests来的过滤器链,一个是通过securityFilterChainBuilders这个过滤器链构建链来的 //将过滤器链交给一个过滤器链代理对象,而这个代理对象就是返回回去的过滤器,后面的代码先不做交代。到这里为止过濾器的过程已经结束从上面源码和标注的注释(也许理解不透彻)来看,其实我们只要回答清楚上面的T1,T2T3这三个问题,就基本弄清楚了
- ignoredRequests的list中嘚值从哪里来的呢,其实我们可以看到里面有一个ignore()方法通过这个来进行设置的
- 然后值得一提的是这里有多少个
mvcMatchers
就会创建多少个ignoredRequests
的对象,吔就会有多少个过滤器链至于源码,可以自行阅读也是在WebSecurity
里面定义的内部类IgnoredRequestConfigurer
这个类里面
- 然后这个FilterChainProxy又是比较复杂的玩意儿,我们还是在接下来文章继续吧
1.3 过滤器实现的流程
- 虽然到目前为止,整个还是没有交代清楚但是我们还是需要画一个小图来整理一下前面的流程吧。为接下来
HttpSecurity
和FilterChainProxy
类解读做点准备