一文读懂为什么在使用SpringSecurity时,web.xml文件里面的springSecurityFilterChain不可以改变

一文读懂为什么在使用SpringSecurity时,web.xml文件里面的springSecurityFilterChain不可以改变

在这里插入图片描述
下面来为大家解释为什么,自然是看一看源码了:
首先明白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这个枚举里面看到
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值