SpringSecurity6 | 回顾Filter

2023-11-06 00:44

本文主要是介绍SpringSecurity6 | 回顾Filter,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏: Java从入门到精通
✨特色专栏: MySQL学习
🥭本文内容:SpringSecurity6 | 回顾Filter
🖥️个人小站 :个人博客,欢迎大家访问
📚个人知识库: Leo知识库,欢迎大家访问

文章目录

    • 1.前言
    • 2.遗留问题
    • 3.请求流程
    • 4.回顾Filter
      • 4.1过滤器回顾
      • 4.2过滤器核心
    • 5.过滤器分类
    • 6.参考文献
    • 7.总结

学习参考 :

  • 讲师:孙帅老师
  • 课程:孙哥说SpringSecurity6

image-20231030235443828

1.前言

大家好,我是Leo哥🫣🫣🫣,上一节我们通过一个HelloWorld案例,以代码的方式实现了我们项目添加登录鉴权功能,只是通过一个就轻松实现了这个功能。那么他其中的原理是什么呢,带着疑问,我们后面几节课主要学习一下如何实现这些的原理。好了,话不多说让我们开始吧😎😎😎。

2.遗留问题

  1. 在引入SpringSecurity依赖后,为什么所有请求就需要先做登录认证了呢?
  2. 登录页面是怎么产生的?
  3. 登录页面可以自定义吗?

后面几篇文章,我们会带着这些问题去研究SpringSecurity,并找出问题的答案。

3.请求流程

一个请求发出之后的基本流程是怎么样的呢,我们的请求是如何被拦截的呢,下面我们简单的来看一下流程图。

image-20231105221856734

流程详解:

  1. 客户端通过浏览器或其他方式向服务器发送请求,SpringSecurity会拦截该请求,并将其交给安全过滤器链进行处理。
  2. 安全过滤器链是SpringSecurity的核心组件,由多个**过滤器(Filter)**组成。每个过滤器都有特定的功能,例如身份验证、授权、会话管理等。在处理请求时,安全过滤器链会按照预定义的顺序依次调用各个过滤器,直到最后一个过滤器完成处理。
  3. 身份验证是SpringSecurity中的一个重要功能,它能够验证请求的发起者是否具有访问受保护资源的权限,通常是通过用户名和密码来验证身份。在安全过滤器链中,如果存在身份验证相关的过滤器,则会自动进行身份验证操作,例如UsernamePasswordAuthenticationFilter
  4. 如果请求通过了身份验证和授权操作,SpringSecurity会将请求转发给受保护资源,并返回相应的响应;否则,会返回相应的错误信息或者直接跳转登录页面。

SpringSecurity对于Servlet的支持是基于Servlet Filter的。也就是说SpringSecurity的实现技术手段也是Filter。

4.回顾Filter

4.1过滤器回顾

SpringSecurity 的 Servlet 支持是基于 Servlet Filter 的,因此首先大致了解一下 Filter 的作用是有帮助的。下图显示了单个 HTTP请求的处理程序的典型分层。

image-20231105222301402

客户端向应用程序发送请求,容器创建一个 FilterChain ,其中包含 Filter 实例和应处理 HttpServletRequestDispatcherServlet 的实例。最多一个 Servlet 可以处理单个 HttpServletRequestHttpServletResponse 。然而,多个 Filter 可用于:

  • Prevent downstream Filter instances or the Servlet from being invoked. In this case, the Filter typically writes the HttpServletResponse.
    防止调用下游 Filter 实例或 Servlet 。在这种情况下, Filter 通常写入 HttpServletResponse
  • Modify the HttpServletRequest or HttpServletResponse used by the downstream Filter instances and the Servlet.
    修改下游 Filter 实例和 Servlet 使用的 HttpServletRequestHttpServletResponse

4.2过滤器核心

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {// do something before the rest of the applicationchain.doFilter(request, response); // invoke the rest of the application// do something after the rest of the application
}

由于 Filter 仅影响下游 Filter 实例和 Servlet ,因此调用每个 Filter 的顺序非常重要。

5.过滤器分类

  1. SecurityContextPersistenceFilter: 该过滤器用来确保在整个请求过程中**SecurityContext(安全上下文)**得以保留和传递。SecurityContext主要是用来存储当前用户的身份信息、角色、权限等。
  2. LogoutFilter: 该过滤器用来处理用户注销请求,通常会清除当前用户的身份信息。
  3. UsernamePasswordAuthenticationFilter: 该过滤器用来处理基于用户名和密码的身份认证请求。
  4. RequestCacheAwareFilter: 该过滤器用来缓存请求,以便后续重定向请求时可以正确地恢复请求状态。
  5. ExceptionTranslationFilter: 该过滤器用来处理由AccessDeniedHandler和AuthenticationEntryPoint抛出的异常,将它们转化为合适的HTTP响应。
  6. FilterSecurityInterceptor: 该过滤器用来进行授权操作,决定是否允许用户访问受保护资源。

6.参考文献

  • https://docs.spring.io/spring-security/reference/servlet/architecture.html

7.总结

以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。

如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。

这篇关于SpringSecurity6 | 回顾Filter的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/353489

相关文章

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

Java基础回顾系列-第三天-Lambda表达式

Java基础回顾系列-第三天-Lambda表达式 Lambda表达式方法引用引用静态方法引用实例化对象的方法引用特定类型的方法引用构造方法 内建函数式接口Function基础接口DoubleToIntFunction 类型转换接口Consumer消费型函数式接口Supplier供给型函数式接口Predicate断言型函数式接口 Stream API 该篇博文需重点了解:内建函数式

Java基础回顾系列-第二天-面向对象编程

面向对象编程 Java类核心开发结构面向对象封装继承多态 抽象类abstract接口interface抽象类与接口的区别深入分析类与对象内存分析 继承extends重写(Override)与重载(Overload)重写(Override)重载(Overload)重写与重载之间的区别总结 this关键字static关键字static变量static方法static代码块 代码块String类特

Java基础回顾系列-第六天-Java集合

Java基础回顾系列-第六天-Java集合 集合概述数组的弊端集合框架的优点Java集合关系图集合框架体系图java.util.Collection接口 List集合java.util.List接口java.util.ArrayListjava.util.LinkedListjava.util.Vector Set集合java.util.Set接口java.util.HashSetjava

Java基础回顾系列-第九天-数据库编程

Java基础回顾系列-第九天-数据库编程 数据库简介工具包java.sql API 内容与数据库建立连接执行SQL语句数据库检索和更新查询结果SQL类型对应Java类型映射元数据异常 API方法DriverManagerConnectionStatementPreparedStatementCallableStatementResultSetjava.sql.Date批处理、存储过程、事务

Java基础回顾系列-第一天-基本语法

基本语法 Java基础回顾系列-第一天-基本语法基础常识人机交互方式常用的DOS命令什么是计算机语言(编程语言) Java语言简介Java程序运行机制Java虚拟机(Java Virtual Machine)垃圾收集机制(Garbage Collection) Java语言的特点面向对象健壮性跨平台性 编写第一个Java程序什么是JDK, JRE下载及安装 JDK配置环境变量 pathHe

Vue2电商项目(二) Home模块的开发;(还需要补充js节流和防抖的回顾链接)

文章目录 一、Home模块拆分1. 三级联动组件TypeNav2. 其余组件 二、发送请求的准备工作1. axios的二次封装2. 统一管理接口API----跨域3. nprogress进度条 三、 vuex模块开发四、TypeNav三级联动组件开发1. 动态展示三级联动数据2. 三级联动 动态背景(1)、方式一:CSS样式(2)、方式二:JS 3. 控制二三级数据隐藏与显示--绑定styl

Hbase Filter+Scan 查询效率优化

Hbase Filter+Scan 查询效率问题 众所周知,Hbase利用filter过滤器查询时候会进行全表扫描,查询效率低下,如果没有二级索引,在项目中很多情况需要利用filter,下面针对这种情况尝试了几种优化的方案,仅供参考,欢迎交流。 根据业务要求,作者需要根据时间范围搜索所需要的数据,所以作者设计的rowKey是以时间戳为起始字符串的。 正确尝试: 1.scan 设置 开始行和结

Filter基本原理和使用

https://www.cnblogs.com/xdp-gacl/p/3948353.html 一、Filter简介   Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控