前言
系统安全可分为身份认证和授权验证两个部分,spring security提供了这两种能力,本文讲述security的设计思路。
设计思想
不赘言,开门见山,简单明了简述spring security的设计思想:
通过filter实现security!使用责任链实现身份认证和授权验证。
就像这样哦。
DelegatingFilterProxy
作用在于:在servlet容器和springContext之间进行桥接。
详细描述下,servlet容器使用自己的标准去注册filter,但是无法感知spring组建的bean。DelegatingFilterProxy的作用在于:DelegatingFilterProxy注册到servlet容器中,然后把所有工作委托给实现filter的springbean。
FilterChainProxy SecurityFilterChain
作用在于:把security工作委派给更多的filter bean。
看图更清晰哦。
做一些介绍
security工作的委派流程:
- DelegatingFilterProxy,把工作交给FilterChainProxy;
- FilterChainProxy又把工作交个SecurityFilterChain;
- SecurityFilterChain把工作交给SecurityFilter链;
securityFilter是一些特殊类型的bean,通过FilterChainProxy注册到SecurityFilterChain。
有一个问题:
为什么没有直接在DelegatingFilterProxy中注册securityFilter呢?
- FIlterChainProxy作为security的工作起点,可以从这里开始debug。
- FilterChainProxy作为security的执行核心,执行了一些不可选的行为。例如最终清理securityContext,使用security的httpfirewall防火墙。
- 支持多个SecurityFilterChain,根据url进行匹配选择,即根据url选择不同的安全策略。
官方是这么说的,源码自然也是这么写的。
接下来通过源码,看看FilterChainProxy都做了什么事情:
org.springframework.security.web.FilterChainProxy#doFilter
org.springframework.security.web.FilterChainProxy#doFilterInternal
参考文档
关于security,我的其他文章。
SpringSecurity-身份认证原理_陈海龙的格物之路-CSDN博客如果你对SpringSecurity-身份认证原理还不了解,这篇文章可以满足你哦。https://blog.csdn.net/chl87783255/article/details/120291501SpringSecurity-授权验证原理_陈海龙的格物之路-CSDN博客本文介绍SpringSecurity授权验证的原理。如果你还不了解原理,快来看看吧。
https://blog.csdn.net/chl87783255/article/details/120292485