首页 > 其他分享 >三、Spring Boot集成Spring Security之securityFilterChain过滤器链详解

三、Spring Boot集成Spring Security之securityFilterChain过滤器链详解

时间:2024-10-12 11:23:46浏览次数:1  
标签:web 请求 Spring Boot springframework 认证 securityFilterChain 过滤器 security

二、默认过滤器链

1、默认配置系统启动日志

image-20241011164955035

2、默认配置的过滤器及顺序如下

  1. org.springframework.security.web.session.DisableEncodeUrlFilter
  2. org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter
  3. org.springframework.security.web.context.SecurityContextPersistenceFilter
  4. org.springframework.security.web.header.HeaderWriterFilter
  5. org.springframework.security.web.csrf.CsrfFilter
  6. org.springframework.security.web.authentication.logout.LogoutFilter
  7. org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter
  8. org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter
  9. org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter
  10. org.springframework.security.web.authentication.www.BasicAuthenticationFilter
  11. org.springframework.security.web.savedrequest.RequestCacheAwareFilter
  12. org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter
  13. org.springframework.security.web.authentication.AnonymousAuthenticationFilter
  14. org.springframework.security.web.session.SessionManagementFilter
  15. org.springframework.security.web.access.ExceptionTranslationFilter
  16. org.springframework.security.web.access.intercept.FilterSecurityInterceptor

3、本文只介绍和登录相关的过滤器

  1. SecurityContextPersistenceFilter
  2. LogoutFilter
  3. UsernamePasswordAuthenticationFilter
  4. DefaultLoginPageGeneratingFilter
  5. DefaultLogoutPageGeneratingFilter
  6. AnonymousAuthenticationFilter
  7. ExceptionTranslationFilter
  8. FilterSecurityInterceptor

三、登录重要概念介绍

  1. 安全上下文仓库(SecurityContextRepository):用于存储安全上下文,默认基于session实现(HttpSessionSecurityContextRepository)
  2. 安全上下文持有者(SecurityContextHolder):用于存储本次请求的安全上下文,默认基于ThreadLocal实现
  3. 安全上下文(SecurityContext):用于存储认证信息
  4. 认证信息(Authentication):用于存储用户及认证结果信息,主要实现类有
  • 用户名密码认证Token:UsernamePasswordAuthenticationToken
  • 匿名认证Token:AnonymousAuthenticationToken
  1. 登录页面请求:跳转到登录页面的请求
  2. 登录请求:在登录页面输入用户名密码后提交的请求
  3. 登出页面请求:跳转到登出页面的请求
  4. 登出请求:在登出页面确认登出提交的请求
  5. 过滤器介绍
    1. 过滤器的入口为doFilter(ServletRequest request, ServletResponse response, FilterChain chain)方法
    2. 过滤器主要分为三部分:chain.doFilter之前代码,chain.doFilter,chain.doFilter之后的代码
    3. chain.doFilter之前的代码按照过滤器链顺序执行
    4. chain.doFilter之后的代码按照过滤器链倒序执行
    5. 调用chain.doFilter表示执行后续的过滤器;不调用chain.doFilter表示不执行后续的过滤器,会按过滤器链倒序执行已经调用的过滤器chain.doFilter之后的代码,这点很重要,下面在介绍每个过滤器时不再赘述。

四、SecurityContextPersistenceFilter

1、实现功能

  1. 登录成功之后的身份认证

2、处理请求类型

  • 所有请求

3、是否会终止过滤器链

  • 不会

4、实现步骤

  1. 从安全上下文仓库中获取安全上下文,如果为空则创建没有认证信息的安全上下文
  2. 将安全上下文设置到安全上下文持有者中供后续业务使用
  3. 调用后续过滤器链
  4. 从安全上下文持有者中获取最新的认证信息
  5. 清除安全上下文持有者中的认证信息
  6. 将步骤4中的认证信息添加到安全上下文仓库中

5、关键源码

image-20241011170847714

五、LogoutFilter

1、实现功能

  1. 清除认证信息
  2. 重定向登录页面

2、处理请求类型

  • 登出请求(默认:POST、/logout请求)

3、是否会终止过滤器链

  • 登出请求时会终止

4、实现步骤

  1. 匹配请求地址
  2. 清除认证信息(CompositeLogoutHandler中注册的LogoutHandler实现类)
  3. 调用登出成功处理器,默认SimpleUrlLogoutSuccessHandler实现重定向登录页面功能,推荐自定义配置,后续介绍

5、关键源码

image-20241011171703708

六、UsernamePasswordAuthenticationFilter

1、实现功能

  1. 使用提交的用户名密码生成用户名密码认证Token
  2. 根据认证结果做不同处理

2、处理请求类型

  • 登录请求(默认:POST、/login请求)

3、是否会终止过滤器链

  • 认证失败时会终止过滤器链,重定向默认登录地址
  • 认证成功时会终止过滤器链,重定向到目标URL地址

4、实现步骤

  1. 匹配请求地址
  2. 默认配置:提交的用户名密码和内存中用户名密码匹配,并校验用户和密码的是否有效等信息
  3. 认证失败时重定向到登录页面
  4. 认证成功时将已认证的安全上下文设置到安全上下文持有者中
  5. 重定向到目标URL地址(未认证访问目标地址,会先重定向登录页面,登录成功后再重定向到目标URL地址)

5、关键源码

image-20241011173506923

七、DefaultLoginPageGeneratingFilter

1、实现功能

  1. 生成默认登录页面

2、处理请求类型

  • 登录页面请求(默认GET、/login请求)
  • 登录失败
  • 登出成功

3、是否会终止过滤器链

  • 登录页面请求、登录失败、登出成功时会终止过滤器链

4、关键源码

image-20241011174012391

八、DefaultLogoutPageGeneratingFilter

1、实现功能

  1. 生成默认登出页面

2、处理请求类型

  • 登出页面请求(默认:GET、/logout请求)

3、是否会终止过滤器链

  • 登出页面请求时会终止过滤器链

4、关键源码

image-20241011175625114

九、AnonymousAuthenticationFilter

1、实现功能

  1. 当前认证信息为空时生成匿名认证信息

2、处理请求类型

  • 所有请求

3、是否会终止过滤器链

  • 不会

4、关键源码

image-20241011180011843

十、ExceptionTranslationFilter

1、实现功能

  1. 处理FilterSecurityInterceptor抛出的异常,根据异常做相应处理

2、处理请求类型

  • 所有请求

3、是否会终止过滤器链

  • 认证失败时会重定向登录页面
  • 授权失败时会返回错误信息

4、关键源码

image-20241011180451374

十一、FilterSecurityInterceptor

1、实现功能

  1. 认证和授权

2、处理请求类型

  • 所有请求

3、是否会终止过滤器链

  • 认证或授权失败会抛出异常由ExceptionTranslationFilter处理该异常

4、关键源码

image-20241011180950735

标签:web,请求,Spring,Boot,springframework,认证,securityFilterChain,过滤器,security
From: https://www.cnblogs.com/sanxiaolq/p/18459037

相关文章

  • 探索Spring Boot在医疗病历B2B交互中的潜力
    第2章设计技术与开发环境2.1相关技术介绍2.1.1B/S模式分析C/S模式主要由客户应用程序(Client)、服务器管理程序(Server)和中间件(middleware)三个部件组成。客户应用程序是系统中用户与数据组件交互。服务器程序负责系统资源,如管理信息数据库的有效管理,其主要工作是当......
  • Spring Boot在医疗B2B平台中的病历数据安全
    第3章需求分析与可行性分析3.1需求分析伴随着信息行业的蓬勃发展和人们办公自动化意识的增强,学习信息管理部门的工作也越来越繁重,原来的基于B2B平台的医疗病历交互系统已经不能完全满足相关人员使用的需要。为了协助信息开展学习信息管理工作,提高工作效率,充分利用信息行......
  • springboot空巢老人健康管理系统小程序-计算机毕业设计源码29889
    摘 要随着社会老龄化程度不断加剧,空巢老人群体的健康管理问题日益引起人们的关注。为了更好地满足空巢老人群体的健康管理需求,本研究致力于设计并实现一款基于SpringBoot框架的空巢老人健康管理系统。该系统旨在为管理员用户、老人用户和医生用户提供全方位的健康管理服务,......
  • 基于Spring Boot+VUE 大学生租房系统(高分毕设)
    文章目录文章目录一、系统需求分析二、系统设计三、系统页面1系统功能模块2管理员模块3房主功能模块4用户功能模块四、资源下载链接 一、系统需求分析根据大学生租房系统的功能需求,进行系统设计。前台功能:进入系统可以实现首页,房屋信息,房屋评价,公告资讯,个人中心,......
  • Spring Boot 集成 RabbitMQ 多个 Broker 发送、消费消息
    1.SpringBoot集成RabbitMQ多个Broker发送、消费消息1.1.版本说明1.2.概述1.3.RabbitMQ信息1.4.Spring配置1.5.定义常量1.6.定义配置属性1.7.定义两个ConnectionFactory1.8.定义两个RabbitTemplate1.9.定义两个SimpleRabbitListenerContainerFacto......
  • 深入解析Spring AI框架:在Java应用中实现智能化交互的关键
    今天我们的SpringAI源码分析主题即将结束。我已经对自己感兴趣的基本内容进行了全面的审视,并将这些分析分享给大家。如果你对这个主题感兴趣,可以阅读以下几篇文章。每篇文章都层层递进,深入探讨相关内容。考虑到长文可能让大家感到疲惫,我采用了逐步推进的方式,确保每一篇都简明易懂......
  • 【02】手把手教你0基础部署SpringCloud微服务商城教学-Mybatis篇(下)
    上期回顾:【01】手把手教你0基础部署SpringCloud微服务商城教学-Mybatis篇(上)Part1.续接上文Mybatis-plus的批处理功能接下来我们学习一下IService的批量查询,我们用以往的for循环做一个对比这是for循环部分的代码privateUserbuilderUser(inti){Useruser=new......
  • Spring源码理解 类接口说明
    FactoryBean、BeanFactoryBeanFactoryBeanFactory是管理和生产Bean的,它是用于访问SpringBean容器的根接口。,定义了管理Bean的方法,获取Bean、包含Bean、是否单例Bean、获取Bean类型等。Spring根据他提供了很多实现,如DefaultListableBeanFactory、XmlBeanFactory、Applica......
  • springboot+vue基于Web的辅助教学平台【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和普及,教育领域正经历着深刻的变革。传统的教学方式逐渐难以满足现代学生的学习需求,他们渴望更加灵活、便捷的学习方式。与此同时,教师也面临教学资源分配不均、管理效率低下等问题。因此,开发一个基于Web的辅......
  • springboot+vue基于springboot+vue的线上学习系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着互联网技术的迅猛发展和信息技术的不断革新,线上学习系统逐渐成为教育领域的重要组成部分。近年来,受疫情影响,线上学习需求更是急剧增长,为教育领域带来了前所未有的挑战与机遇。传统的线下教学模式已经难以满足现代教育的多元化需求......