【Spring Security】3.底层原理

一、引入

官方文档:Spring Security的底层原理

Architecture:整个SpringSecurity的基础架构

官方解释:本节讨论 Spring Security 在基于 Servlet 的应用程序中的高级体系结构。 我们在参考的“身份验证授权防范漏洞利用”部分中基于这种高层次的理解。

image-20240306110334111

Spring Security之所以默认帮助我们做了那么多事情,它的底层原理是传统的Servlet过滤器

请求由我们的客户端向后端服务器发起,经过层层过滤器的进行,最后它会到达Servlet。

我们刚刚写的index方法,底层就是servlet当中的具体的方法。因为我们的应用程序是SpringBoot程序,所以我们的应用程序是通过controller的方式来实现的servlet。

在正常情况下这些过滤器在应用程序启动的时候就要被注册在servlet容器里才能工作,但为了更灵活的在应用程序当中配置这些过滤器,其实我们的应用程序采用的是SpringBoot形式,而SpringBoot里的本质是spring、springMVC这些基础框架,也就意味着,其实在spring这种环境下,希望把这些Filter对象当做spring容器中的bean对象来管理。这些过滤器在添加、删除、启用和禁用的过程中就会更灵活。


二、Filter

下图展示了处理一个Http请求时,过滤器和Servlet的工作流程:

filterchain

因此我们可以在过滤器中对请求进行修改或增强。


1)DelegatingFilterProxy

DelegatingFilterProxy(委托过滤器代理) 是 Spring Security 提供的一个 Filter 实现,可以在 Servlet 容器和 Spring 容器之间建立桥梁。通过使用 DelegatingFilterProxy,这样就可以将Servlet容器中的 Filter 实例放在 Spring 容器中管理。

filter先以bean对象的形式注册在spring容器中,DelegatingFilterProxy帮助我们在spring的环境中加载filter bean对象。但因为DelegatingFilterProxy本身也是个filter,它会被注册在servlet过滤器链(FilterChain)中。在Spring容器中注册的bean filter就可以在DelegatingFilterProxy调用,从而工作在整个Servlet中的FilterChain,也就是过滤器链中。整个过程就叫做委托。

delegatingfilterproxy


2)FilterChainProxy

复杂的业务中不可能只有一个过滤器。因此FilterChainProxy是Spring Security提供的一个特殊的Filter,它允许通过SecurityFilterChain将过滤器的工作委托给多个Bean Filter实例。

应用程序为了更灵活,DelegatingFilterProxy管理FilterChainProxy过滤器链代理的这个类,然后通过过滤器链代理再去调用SecurityFilterChain。FilterChainProxy又被DelegatingFilterProxy调用。DelegatingFilterProxy是真正注册在servlet容器中的。

filterchainproxy


3)SecurityFilterChain

SecurityFilterChain 被 FilterChainProxy 使用,负责查找当前的请求需要执行的Security Filter列表。

securityfilterchain


4)Multiple SecurityFilterChain

为了让应用程序更灵活。可以有多个SecurityFilterChain的配置,FilterChainProxy决定使用哪个SecurityFilterChain,用于处理更复杂的应用程序。

如果请求的URL是 /api/messages/,它首先匹配SecurityFilterChain0的模式/api/**,因此只调用SecurityFilterChain 0,r如果在 SecurityFilterChain 0 中没有找到实例匹配,就会一直从SecurityFilterChain 0找到SecurityFilterChain n - 1。假设没有其他SecurityFilterChain实例匹配,那么将调用SecurityFilterChain n,它匹配的是/**,也就是所有客户端的请求。

multi securityfilterchain

  • 18
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security是一个基于Spring框架的安全性框架,主要用于认证、授权和攻击防护。它的底层原理主要是通过Filter来处理请求,实现对请求的拦截和处理。具体来说,Spring Security底层原理包括以下几个方面: 1. 过滤器链:Spring Security通过一系列的过滤器来处理请求,这些过滤器按照一定的顺序组成了一个过滤器链。每个过滤器都有特定的功能,例如身份验证、授权、会话管理等。 2. 安全上下文:Spring Security通过SecurityContextHolder来管理安全上下文,其中包括了当前用户的身份信息、权限信息等。在处理请求时,Spring Security会从安全上下文中获取相应的信息来进行处理。 3. 用户认证:Spring Security提供了多种用户认证方式,包括基于表单、HTTP基本认证、LDAP认证等。在用户认证过程中,Spring Security会根据用户提供的信息进行身份验证,并将验证结果存储到安全上下文中。 4. 授权管理:Spring Security提供了多种授权方式,包括基于角色、基于权限、基于表达式等。在授权管理过程中,Spring Security会根据用户的身份信息和请求的URL等信息来判断用户是否有相应的权限。 5. 攻击防护:Spring Security提供了多种攻击防护机制,包括CSRF防护、XSS防护、SQL注入防护等。在处理请求时,Spring Security会对请求进行安全性检查,防止恶意攻击。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值