当前位置: 首页 > news >正文

慈溪市建设局网站厦门建设集团网站

慈溪市建设局网站,厦门建设集团网站,广州网站建设的费用,做企业网的公司spring-security过滤器 版本信息过滤器配置过滤器配置相关类图过滤器加载过程创建 HttpSecurity Bean 对象创建过滤器 过滤器作用ExceptionTranslationFilter 自定义过滤器 本章介绍 spring-security 过滤器配置类 HttpSecurity,过滤器加载过程,自定义过…

spring-security过滤器

  • 版本信息
  • 过滤器配置
    • 过滤器配置相关类图
    • 过滤器加载过程
      • 创建 HttpSecurity Bean 对象
      • 创建过滤器
  • 过滤器作用
    • ExceptionTranslationFilter
  • 自定义过滤器

本章介绍 spring-security 过滤器配置类 HttpSecurity,过滤器加载过程,自定义过滤器

版本信息

内容版本
JDK17
spring-boot-starter-web3.2.2
spring-boot-starter-security3.2.2
spring-security6.2.1

过滤器配置

过滤器配置相关类图

过滤器链由HttpSecurity的配置类配置生成的,在HttpSecurity.build()的时候添加至过滤器链,主要的配置类如下

org.springframework.security.config.annotation.web.configurers.CsrfConfigurer
org.springframework.security.config.annotation.web.configurers.ExceptionHandlingConfigurer
org.springframework.security.config.annotation.web.configurers.HeadersConfigurer
org.springframework.security.config.annotation.web.configurers.SessionManagementConfigurer
org.springframework.security.config.annotation.web.configurers.SecurityContextConfigurer
org.springframework.security.config.annotation.web.configurers.RequestCacheConfigurer
org.springframework.security.config.annotation.web.configurers.AnonymousConfigurer
org.springframework.security.config.annotation.web.configurers.ServletApiConfigurer
org.springframework.security.config.annotation.web.configurers.LogoutConfigurer
org.springframework.security.config.annotation.web.configurers.CorsConfigurer

在这里插入图片描述

过滤器加载过程

创建 HttpSecurity Bean 对象

  1. SpringBoot 自动装载类 org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
    在这里插入图片描述
  2. @Import 导入 org.springframework.boot.autoconfigure.security.servlet.SpringBootWebSecurityConfiguration
    在这里插入图片描述
  3. Spring Security 核心注解类 @EnableWebSecurity
    在这里插入图片描述
  4. @Import 导入 org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration
    在这里插入图片描述
  5. HttpSecurityConfiguration 配置类中开始创建 HttpSecurity 的bean 对象
    在这里插入图片描述
    可以在 org.springframework.security.config.annotation.AbstractConfiguredSecurityBuilder#add 方法中加个断点,看初始化添加了多少个配置类
    在这里插入图片描述
    配置类还可以扩展的,基于SPI扩展 org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration#applyDefaultConfigurers
    在这里插入图片描述
    从这段代码可以看出,可以自定义过滤器的配置类,对扩展开放√

创建过滤器

  1. Spring Boot 自动装载在之前已分析,直接定位到 org.springframework.boot.autoconfigure.security.servlet.SpringBootWebSecurityConfiguration, 在这个类中有创建过滤器链的Bean
    在这里插入图片描述
  2. 默认过滤器链编译过程,查看 http.build() 方法
    在这里插入图片描述
    首先判断是否已经构建了,防止重复构建。再执行 doBuild() 方法
    在这里插入图片描述
    在编译的过程中,会读取之前的配置类,将相关的过滤器添加到过滤器链,查看 configure() 方法
    在这里插入图片描述
  3. 在配置类中,创建过滤器类,将过滤器类加载到过滤器链,列举一个配置类org.springframework.security.config.annotation.web.configurers.CsrfConfigurer#configure,其它的配置类和这个相似
    在这里插入图片描述
    将过滤器添加到列表 org.springframework.security.config.annotation.web.builders.HttpSecurity#filters
    在这里插入图片描述
  4. 构建过滤器链,org.springframework.security.config.annotation.web.builders.HttpSecurity#performBuild
    在这里插入图片描述

过滤器作用

ExceptionTranslationFilter

官网介绍 https://docs.spring.io/spring-security/reference/servlet/architecture.html#servlet-exceptiontranslationfilter

在这里插入图片描述
在这里插入图片描述
注意,执行顺序在 ExceptionTranslationFilter 之后的过滤器才会捕获到异常,并进行异常处理。默认过滤器的顺序如图所示,在 ExceptionTranslationFilter 之后的过滤器只有 org.springframework.security.web.access.intercept.AuthorizationFilter,该过滤器抛出的异常可以被异常过滤器捕获到
在这里插入图片描述

自定义过滤器

参考官网 https://docs.spring.io/spring-security/reference/servlet/architecture.html#adding-custom-filter,提示部分的内容挺好的
在这里插入图片描述
根据提示可以定义过滤器代码如下

import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.filter.OncePerRequestFilter;import java.io.IOException;
import java.nio.file.AccessDeniedException;public class TenantFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,FilterChain filterChain) throws ServletException, IOException {String tenantId = request.getHeader("X-Tenant-Id");boolean hasAccess = isUserAllowed(tenantId);if (hasAccess) {filterChain.doFilter(request, response);return;}throw new AccessDeniedException("Access denied");}private boolean isUserAllowed(String tenantId) {// TODO checkreturn false;}
}

避免过滤器注册到 Tomcat 中,可以参考如下代码
在这里插入图片描述

http://www.yayakq.cn/news/869196/

相关文章:

  • 专业网站建设电话如何做公司网站网页
  • 南京建设网站做网站每年交服务费
  • 济南网站优化推广公司宁波网站制作网站
  • 平台网站怎么优化网站对应的ip地址吗
  • 无锡企业网站制作策划子网站域名ip地址查询
  • php零基础做网站深圳网站建设厂家
  • 招聘网站套餐网站营销不同阶段的网站分析目标
  • 昆山网站建设苦瓜很多域名301定重到另一网站
  • 企业网站建设实训网站建设哪家最好用
  • 淘宝客 备案 网站名称友情链接什么意思
  • 做政协网站软件的公司鄂伦春网站建设
  • 手机端网站推广phpcmsv9中英文网站
  • 可以做分销的网站在pc端预览手机网站
  • 链家在线网站是哪个公司做的商城网站大全
  • 苏州华亭建设工程有限公司网站沧州网站建设公司排名
  • 网站建设项目标书手机编程免费软件app
  • 竞价单页网站模板深圳横岗网站建设
  • 网站功能插件创业计划书建设网站
  • 湖南建设厅网站证书查询wordpress+培训模板下载
  • 网站控制面板wp-config.php wordpress
  • 中国室内设计联盟官方网站入口中国银行官网登录入口
  • 长沙电商运营培训河南企业网站优化外包
  • 赛扬e3300做网站网站后台难做吗
  • 泰州网站制作建设网站开发设计素材
  • 龙华网站建设的基本步骤东莞网站建设营销平台的
  • 网站建设储蓄卡学生管理系统 静态网站源码
  • 学校官方网站建设做淘客的网站有哪些
  • 浏览器收录网站东营信息发布平台
  • 广州微信网站建设包头网站建设熊掌号
  • 聊天软件开发哪个好点西安seo技术培训班