本文共 1018 字,大约阅读时间需要 3 分钟。
首先明白DelegatingFilterProxy是一个过滤器(这个是很明显的)
既然是过滤器,那么他真正的作用就是执行doFilter()
方法了: 我们发现经过1这么长的一段代码,最后的目的只是将delegate
赋值而已,最后调用invokeDelegate
而已 最后我们发现真正调用doFilter()其实是delegate
,而DelegatingFilterProxy
只是一个摆设。到这里我们明白了delegate
才是真正的Filter. 在init方法里面会调用下面这个方法: getFilterName()就可以获取到我们的springSecurityFilterChain
(终于点题了) 但是还没完,在initFilterBean方法里面还调用了下面这个方法: 这个方法的作用获取Spring容器里面一个名叫springSecurityFilterChain
的Filter,这个名字是有框架自己规定取得这个名字,那么到这里我们就算解释清楚了,下面我们来看看这个名叫springSecurityFilterChain
的过滤器的真实类型到底是什么。 接下来我们来看看delegate
的类型: 他最开始并不是一个Filter的实现类,那么一定在执行的过程的某个地方将某个实现类对象赋值给了它,事实上他是FilterChainProxy
类,其doFilter方法如下: 我们发现无论如何他最后都会执行一个doFilterInternal
方法,内容如下: 上面红框中List<Filter> filters = getFilters(fwRequest);
可以获取到SpringSecurity
在使用时需要的各种过滤器,具体需要那些过滤器可以看SecurityFilters
这个枚举. 综上所述: SpringSecurity通过在Spring容器获取一个名叫名叫springSecurityFilterChain的FilterChainProxy类(并且这个名字不可以改,因为在Spring容器里面就叫这个),这个类的作用就是获取SpringSecurity使用时需要的各种过滤器,这些过滤器我们可以再在SpringSecurity这个枚举里面看到
转载地址:http://xolzi.baihongyu.com/