博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一文读懂为什么在使用SpringSecurity时,web.xml文件里面的springSecurityFilterChain不可以改变
阅读量:3958 次
发布时间:2019-05-24

本文共 1018 字,大约阅读时间需要 3 分钟。

一文读懂为什么在使用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这个枚举里面看到

转载地址:http://xolzi.baihongyu.com/

你可能感兴趣的文章
Linux Netlink通信机制详解
查看>>
rsync 远程同步
查看>>
nano使用
查看>>
c函数
查看>>
linux 链接
查看>>
centos6.x 添加开机启动服务
查看>>
zfs 简单使用
查看>>
linux EXT4格式分区扩容
查看>>
实现 du 命令
查看>>
git revert reset 使用
查看>>
一些比较好的golang安全项目
查看>>
HTTP状态码
查看>>
go语言
查看>>
mysql mariaDB 以及存储引擎
查看>>
游戏行业了解介绍
查看>>
linux at 命令使用
查看>>
Go在windows下执行命令行指令
查看>>
inotify
查看>>
inode
查看>>
Shell: sh,bash,csh,tcsh等shell的区别
查看>>