SpringSecurity-设计思想

前言

系统安全可分为身份认证和授权验证两个部分,spring security提供了这两种能力,本文讲述security的设计思路。

设计思想

不赘言,开门见山,简单明了简述spring security的设计思想:

通过filter实现security!使用责任链实现身份认证和授权验证。

就像这样哦。

 SpringSecurity-设计思想_第1张图片

DelegatingFilterProxy

作用在于:在servlet容器和springContext之间进行桥接。

详细描述下,servlet容器使用自己的标准去注册filter,但是无法感知spring组建的bean。DelegatingFilterProxy的作用在于:DelegatingFilterProxy注册到servlet容器中,然后把所有工作委托给实现filter的springbean。

FilterChainProxy SecurityFilterChain

作用在于:把security工作委派给更多的filter bean。

看图更清晰哦。

SpringSecurity-设计思想_第2张图片

做一些介绍

security工作的委派流程:

  1. DelegatingFilterProxy,把工作交给FilterChainProxy;
  2. FilterChainProxy又把工作交个SecurityFilterChain;
  3. SecurityFilterChain把工作交给SecurityFilter链;

securityFilter是一些特殊类型的bean,通过FilterChainProxy注册到SecurityFilterChain。 

有一个问题:

为什么没有直接在DelegatingFilterProxy中注册securityFilter呢?

  1. FIlterChainProxy作为security的工作起点,可以从这里开始debug。
  2. FilterChainProxy作为security的执行核心,执行了一些不可选的行为。例如最终清理securityContext,使用security的httpfirewall防火墙。
  3. 支持多个SecurityFilterChain,根据url进行匹配选择,即根据url选择不同的安全策略。

官方是这么说的,源码自然也是这么写的。

接下来通过源码,看看FilterChainProxy都做了什么事情:

org.springframework.security.web.FilterChainProxy#doFilter

SpringSecurity-设计思想_第3张图片

org.springframework.security.web.FilterChainProxy#doFilterInternal

SpringSecurity-设计思想_第4张图片

参考文档

Spring Security Reference

关于security,我的其他文章。

SpringSecurity-身份认证原理_陈海龙的格物之路-CSDN博客如果你对SpringSecurity-身份认证原理还不了解,这篇文章可以满足你哦。https://blog.csdn.net/chl87783255/article/details/120291501SpringSecurity-授权验证原理_陈海龙的格物之路-CSDN博客本文介绍SpringSecurity授权验证的原理。如果你还不了解原理,快来看看吧。https://blog.csdn.net/chl87783255/article/details/120292485

SpringSecurity-自定义分布式session与url授权验证_陈海龙的格物之路-CSDN博客springsecurity通过配置实现自定义扩展,例如实现分布式session、url授权验证等。来吧,一起看看怎么玩security。https://blog.csdn.net/chl87783255/article/details/120288973

你可能感兴趣的:(spring,security,security设计思路)