1.引言在 spring boot项目之中,我们引入 spring security依赖,什么也没做,启动项目 spring security 就会生效,访问请求就进行了拦截。
spring boot 对于 spring security 提供了自动化配置方案,可以使用更少的配置来使用 spring security。
那么这个过滤器链是怎么加载和实现拦截的呢?
2.spring security过滤器链加载1.2.注册名为 springsecurityfilterchain的过滤器当 spring boot 项目启动后,securityfilterautoconfiguration类会加载 delegatingfilterproxyregistrationbean注册过滤器,名字为 springsecurityfilterchain。
注意:springsecurityfilterchain名字是固定写死的。
delegatingfilterproxyregistrationbean 注册成功后,该过滤器就被加载了到了注册器中。然后调用getfilter()方法生成 delegatingfilterproxy代理对象并注册到 ioc中 。
3、查看 delegatingfilterproxy类我们访问项目,就会进入 delegatingfilterproxy类的 dofilter方法。
delegatingfilterproxy类本质也是一个 filter,其间接实现了 filter接口,但是在 dofilter中其实调用的从 spring 容器中获取到的代理 filter的实现类。
返回的 filterchainproxy对象。
由此可知,delegatingfilterproxy类通过 springsecurityfilterchain这个名称,得到了一个 filterchainproxy过滤器,最终执行的是这个过滤器的 dofilter方法。
验证 springsecurityfilterchain名词不能修改
查看 initdelegate方法。
4.查看 filterchainproxy类filterchainproxy类本质也是一个 filter,所以查看 dofilter方法。留意该类里面的属性。
public class filterchainproxy extends genericfilterbean { private static final log logger = logfactory.getlog(filterchainproxy.class); private static final string filter_applied = filterchainproxy.class.getname().concat(".applied"); // 过滤器链 private list<securityfilterchain> filterchains; private filterchainproxy.filterchainvalidator filterchainvalidator; private httpfirewall firewall;
4.1 查看 dofilterinternal方法惊不惊喜?15个过滤器都在这里了!
4.2 查看 getfilters方法原来这些过滤器都被封装进 securityfilterchain对象中。
5 查看 securityfilterchain接口securityfilterchain类是个接口,实现类也只有一个 defaultsecurityfilterchain类。
defaultsecurityfilterchain类的构造方法,初始化了 list filters,是通过传参放进去的。
过滤器链参数是什么时候传入的?
6. 查看 springbootwebsecurityconfiguration类创建 spring security 过滤器链是交给 spring boot 自动配置,由 springbootwebsecurityconfiguration类创建注入。
查看 websecurityconfigureradapter类。
然后会注入 httpsecurity对象,httpsecurity可以理解为 spring security 的 http核心配置,存放 spring security 中的过滤器链、请求匹配路径等相关认证授权的重要方法。
然后开始创建 spring security 过滤器链了,是交给 spring boot自动配置,一共有 15个过滤器。
使用 orderedfilter进行代理,并设置了order属性。
添加完成后,将这些过滤器再封装为 defaultsecurityfilterchain对象。
最后通过 websecurityconfiguration配置加载 springsecurityfilterchain,websecurityconfiguration中维护了securityfilterchains属性,会存放过滤器链中所有的过滤器。
以上就是springboot整合spring security过滤器链加载执行流程是什么的详细内容。