SpringSecurity定义多个过滤器链

news2024/10/1 19:38:12

在Spring Security中可以定义多个过滤器链,一个WebSerityConfigurerAdapter的实例就可以配置一个过滤器链,我们只需要配置多个WebSerityConfigurerAdapter的实例即可
在这里插入图片描述
可以看到,当请求到达 FilterChainProxy 之后,FilterChainProxy 会根据请求的路径,将请求转发到不同的 过滤器链 上面去,不同的 过滤器链 对应了不同的过滤器,也就是不同的请求将经过不同的过滤器。


@Configuration
public class SecurityConfig {
    @Bean
    protected UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withUsername("javaboy").password("{bcrypt}$2a$10$Sb1gAUH4wwazfNiqflKZve4Ubh.spJcxgHG8Cp29DeGya5zsHENqi").roles("admin", "aaa", "bbb").build());
        manager.createUser(User.withUsername("sang").password("{noop}123").roles("admin").build());
        manager.createUser(User.withUsername("吴名氏").password("{MD5}{Wucj/L8wMTMzFi3oBKWsETNeXbMFaHZW9vCK9mahMHc=}4d43db282b36d7f0421498fdc693f2a2").roles("user", "aaa", "bbb").build());
        return manager;
    }

    @Configuration
    @Order(1)
    static class DefaultWebSecurityConfig extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.antMatcher("/foo/**")
                    .authorizeRequests()
                    .anyRequest().hasRole("admin")
                    .and()
                    .csrf().disable();
        }
    }

    @Configuration
    @Order(2)
    static class DefaultWebSecurityConfig2 extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.antMatcher("/bar/**")
                    .authorizeRequests()
                    .anyRequest().hasRole("user")
                    .and()
                    .formLogin()
                    .permitAll()
                    .and()
                    .csrf().disable();
        }
    }
}

说明:

  1. 首先,SecurityConfig 不再需要继承自 WebSecurityConfigurerAdapter了,只是作为一个普通的配置类,加上 @Configuration 注解即可。
  2. 提供 UserDetailsService 实例,相当于是我们的数据源。
  3. 创建静态内部类继承 WebSecurityConfigurerAdapter 类,同时用 @Configuration
    注解标记静态内部类是一个配置类,配置类里边的代码就和之前的一样了,无需赘述。
  4. 每一个静态内部类相当于就是一个过滤器链的配置。
  5. 注意在静态内部类里边,我没有使用 http.authorizeRequests()
    开始,http.authorizeRequests() 配置表示该过滤器链过滤的路径是 /。在静态内部类里边,我是用了
    http.antMatcher("/bar/
    ") 开启配置,表示将当前过滤器链的拦截范围限定在
    /bar/**。所以有的时候authorizeRequests()不能放在第一个位置
  6. 当存在多个过滤器链的时候,必然会有一个优先级的问题,所以每一个过滤器链的配置类上通过 @Order(2)
    注解来标记优先级。数字越大优先级越低。请求会先进入优先级高的过滤器链中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/437555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是 CDN

CDN 是一种用来分发内容的网络拓扑结构,在彻底搞明白它之前,我们需要先来理解另外两个名词。 1、节点 用户使用CDN网络前,CDN提供商会在全国/全球部署多个节点。这里的节点可以看做机房,或者服务器集群,专业的称呼是…

瑞吉外卖项目——前后端分离

前后端分离开发 介绍 前后端分离开发,就是在项目开发过程中,对于前端代码的开发由专门的前端开发人员负责,后端代码则由后端开发人员负责,这样可以做到分工明确、各司其职,提高开发效率,前后端代码并行开…

Compose 学习总结

ompose发布正式版已经有一段时间了。趁最近比较闲,抓紧学习一波。 学习过程中,主要以实战项目中常用技术为目标。下面是项目地址,会长期更新,希望能给正在学习Compose的小伙伴一点参考。同时您有什么好的建议,也可以提…

嗖的一下!3分钟用ChatGPT生成海南旅游思维导图!

大家好,我是菜鸟哥! 五一长假即将来临,很多小伙伴都要准备出去玩了!旅游肯定要做攻略啊,比如热门的景点海南三亚,北京,上海,成都这些都是打卡的网红景点!小编比较喜欢去海…

IIC协议相关

一.IIC协议初识 IIC(集成电路总线),半双工同步通信方式 *特点 1.简单性和有效性 由于接口直接在组件之上,因此IIC总线占用的空间特别小,减少了电路板的空间和芯片管脚的数量,降低了互联成本,总线的长度可高达25英尺…

Figma转Sketch的3种免费又快捷的方法!

Figma和Sketch是UI设计师常用的两款软件。Figma属于在线协作设计工具,而Sketch是一款本地应用程序。它们都有许多优点,深受许多设计师的喜爱。然而,在实际工作中,有时需要将这两种文件进行转换,例如将需要在Sketch中使…

AI绘画——Night Sky YOZORA Model 模型 ——“实现终极图像质量和大图像尺寸(>1536 x 1024)”

目录 Night Sky YOZORA Model 模型 ——“实现终极图像质量和大图像尺寸(>1536 x 1024)”由YozoRaAru培训 如果你需要更好的色彩表现,我推荐你试一下Color Box 省流版介绍:一个字“炫”,tag也是越炫越好 以下是…

javaweb830在线答疑系统dzkfA1A5程序

2.系统用户管理:不管是超级管理员还是普通管理员都需要管理系统用户,包括普通管理员的添加、删除、修改、查询,修改管理员的登录密码,新添加的管理员用户可以登录系统。 3.注册用户管理:游客在前…

多因子优化,多任务优化,多模式优化之间的区别

最近几年在进化计算这个圈子里多任务优化Multitasking很火,其中包含多因子Multifactorial Evolutionary, 多任务 Multitasking Evolutionary, 和多模式进化 Multiform Evolutionary。 今天就来讲讲他们之间的区别。 多因子优化 在“Enhancing Evolutionary Multi…

CCF-CSP真题《202303-1 田地丈量》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号:202303-1试题名称:田地丈量时间限制:1.0s内存限制:512.0MB问题描述: 问题描述 西西艾弗岛上散落着 n 块田地。每块田地可视为…

HTTP与HTTPS详解

一、HTTP的概念 HTTP是超文本传输协议,是一种应用层协议,是基于为浏览器/服务器间提供统一的信息交换格式而出现的,其发展历程为HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3。 在HTTP/3之前,HTTP都是基于TCP传输的。 二、HTTP报文格式 …

设计模式之状态模式(C++)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一、状态模式是什么? 状态模式是一种行为型的软件设计模式,当一个对象的内在状态改变时,其行为…

C++ Linux Web Server 面试基础篇-操作系统(二)

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️ Qt5.9专栏定期更新Qt的一些项目Demo 项目与…

ClickHouse分区表的正面与侧面

当我们处理连续数据并需要基于移动窗口(如,仅使用过去三个月数据)计算时使用分区功能非常有用,因为分区无需删除数据,就能高效避过不使用的(或过期)数据。本文介绍分区表原理,对比查…

一文读懂|数字化到底是什么?

现在大家都在说数字化,数字化到底是什么? 翻阅很多关于数字化的文章,大部分都在混淆术语,部分文章已经开始将数字化标记为数字化转型,以安抚管理层、获得项目批准或进行销售...... 所以这篇内容,我会尽可…

第十四章 动手,高级写法应用让SQL飞

参考《收获,不止SQL优化》作者: 梁敬彬 / 梁敬弘 所谓高级SQL,就是内部被优化过的SQL,可以用简单的语法实现复杂的功能,同时性能上还有提升。比如INSERT ALL、WITH子句、MERGE…… 一、 高级写法思维导图(自己整理&am…

java连接webservice

前言 WebService 也叫XML Web Service,WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。 一、…

什么是 IT 基础架构管理

各行各业的企业组织不断面临创新和扩展的压力。就在十多年前,一个企业组织可以争取时间,在投资新技术方面保持保守,同时仍然保持竞争优势。快进到今天,随着业务实践的变化和新技术的不断涌现,商业和技术格局更加动态。…

【C++】文件IO流及stringstream流的使用

文章目录 一、引入二、自定义类型隐式类型转换三、sync_with_stdio同步四、文件IO流4.1 open和close文件4.2 写入文件与读出文件 五、stringstream流的使用5.1 将数值类型数据格式化为字符串5.2 序列化和反序列化 一、引入 int main() {string str;while (cin >> str){c…

适合零基础小白,循序渐进学习--文件操作--相关函数

目录 一. 前言 二. 正文 2. 1什么是文件 (1)程序文件 (2)数据文件 2.2文件名 2.3文件类型 2.4 文件缓冲区 2.5 文件指针 2.7 文件操作函数 (1) fopen()--- 打开文件 (2) fclose()--- 关闭文件 2.7 文件的顺序读写&…