在Spring Security中可以同时存在多个过滤器链,一个WebSecurityConfigurerAdapter的实例就可以配置一条过滤器链。

  我们来看如下一个案例:

@Configuration
public class SecurityConfig {@BeanUserDetailsService us(){InMemoryUserDetailsManager users = new InMemoryUserDetailsManager();users.createUser(User.withUsername("剑气近").password("{noop}123").roles("admin").build());return users;}@Configuration@Order(1)static class SecurityConfig01 extends WebSecurityConfigurerAdapter{@Overrideprotected void configure(HttpSecurity http) throws Exception {InMemoryUserDetailsManager users = new InMemoryUserDetailsManager();users.createUser(User.withUsername("chain1in").password("{noop}123").roles("admin").build());http.antMatcher("/bar/**").authorizeRequests().anyRequest().authenticated().and().formLogin().loginPage("/mylogin.html").loginProcessingUrl("/bar/login").successHandler(((req, resp, auth) -> {resp.setContentType("application/json;charset=UTF-8");String s = new ObjectMapper().writeValueAsString(auth);resp.getWriter().write(s);})).permitAll().and().csrf().disable().userDetailsService(users);}}@Configuration@Order(2)static class SecurityConfig02 extends WebSecurityConfigurerAdapter{@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("chain2out").password("{noop}123").roles("admin");}@Overrideprotected void configure(HttpSecurity http) throws Exception {InMemoryUserDetailsManager users = new InMemoryUserDetailsManager();users.createUser(User.withUsername("chain2in").password("{noop}123").roles("admin").build());http.antMatcher("/foo/**").authorizeRequests().anyRequest().authenticated().and().formLogin().loginPage("/mylogin.html").loginProcessingUrl("/foo/login").successHandler(((req, resp, auth) -> {resp.setContentType("application/json;charset=UTF-8");String s = new ObjectMapper().writeValueAsString(auth);resp.getWriter().write(s);})).permitAll().and().csrf().disable().userDetailsService(users);}}
}

  在SecurityConfig中分别定义两个静态内部类SecurityConfig01和SecurityConfig02,两个配置类都继承自WebSecurityConfigurerAdapter, 可以分别配置一条过滤器链。

  先来看Security01,在Security01中,我们设置过滤器链的拦截规则是/bar/**,即如果请求路径是/bar/**格式的,则进入到Security01的过滤器链中进行处理。同时我们配置了局部 AuthenticationManager 对应的用户是 chain1in/123 ,由于没有重写 configure(AuthenticationManagerBuilder)方法,所以注册到 Spring 容器中的 UserDetailsService 将作为局部 AuthenticationManager的parent对应的用户,换句话说,如果登录的路径是/bar/login,那么升发者可以使用 chain1in/123和 剑气近/123两个用户进行登录。

  再来看SecurityConfig02。在Security02中,我们设置过滤器链的拦截规则是/foo/**,即如果请求路径是/foo/**格式的,则进入到Secunty02的过滤器链中进行处理,同时我们配置了局部 AuthenticationManager 对应的用户是 chain2in/123 ,由于重写了 configure(Authentication ManagerBuilder)方法,在该方法中定义了局部AuthenticationManager的parent对应的用户,此时注册到Spring容器中的UserDetailsService实例对于/foo/**过滤器链不再生效。换句话说, 如果登录路径是/foo/login,开发者可以使用chain2in/123和 chain2out/123两个用户进行登录,而不可以使用 剑气近/123进行登录。

  需要注意的是,如果配置了多个过滤器链,需要使用@Order注解来标记不同配置的优先级(即不同过滤器链的优先级),数字越大优先级越低,当请求到来时,会按照过滤器链的优先级从高往低,依次进行匹配。

  

  

Spring Security定义多个过滤器链(10)相关推荐

  1. Spring Security和多个过滤器链

    Spring Security是一项非常有用的技术. 它使您可以保护应用程序而不会过于侵入,并允许插入许多不同的身份验证机制. 另一方面,要使用它并不是那么容易,并且每次接触它时我都必须重新学习这些工 ...

  2. Spring Security的内置过滤器是如何维护的?

    Spring Security中的内置过滤器顺序是怎么维护的?我想很多开发者都对这个问题感兴趣.本篇我和大家一起探讨下这个问题. HttpSecurity包含了一个成员变量FilterOrderReg ...

  3. springBoot整合spring security+JWT实现单点登录与权限管理前后端分离

    在前一篇文章当中,我们介绍了springBoot整合spring security单体应用版,在这篇文章当中,我将介绍springBoot整合spring secury+JWT实现单点登录与权限管理. ...

  4. springBoot整合spring security+JWT实现单点登录与权限管理前后端分离--筑基中期

    写在前面 在前一篇文章当中,我们介绍了springBoot整合spring security单体应用版,在这篇文章当中,我将介绍springBoot整合spring secury+JWT实现单点登录与 ...

  5. spirng框架之spring security(一)

    文章目录 目录 一.spring security 核心功能 二.配置用户存储及自定义登录页 三.防范CSRF攻击 四.退出及获取登录用户信息 五.Spring Security基本原理 六.自定义用 ...

  6. spring security:第一个程序解析

    上一篇在一个项目里配置了spring security,这里大致说一些这些配置的作用. pom.xml 文件解析 <!-- spring security --><!-- sprin ...

  7. 【译】Spring 官方教程:Spring Security 架构

    原文:Spring Security Architecture 译者:徐靖峰 校对:马超君 专题指南 本文是 Spring Security 的入门指南,并对 Spring Security 的框架设 ...

  8. 2021最新Spring Security知识梳理

    2021最新Spring Security知识梳理 一.SpringSecurity 框架简介 Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spri ...

  9. Spring Security 安全框架

    Spring Security 一. Spring Security 简介 1 概括 Spring Security 是一个高度自定义的安全框架.利用 Spring IoC/DI和 AOP 功能,为系 ...

最新文章

  1. 用html做12进制时钟特效,js+css3实现简单时钟特效
  2. 2019ICPC(上海) - Color Graph(二分图+状态压缩)
  3. OneAPM Cloud Test——系统性能监控神器
  4. 操作系统和数据库的知识梳理(思维导图)
  5. 07-OSPF区域类型--NSSA区域/完全NSSA区域
  6. 第11章 樱花树(《C和C++游戏趣味编程》配套教学视频)
  7. 常用的数据库软件各自有什么特点?
  8. js递归遍历json对象,js循环遍历json数组
  9. elasticsearch 更新数据 (部分字段更新)
  10. 社工小组 计算机小组活动,《社工小组活动常用游戏整理》
  11. python里lambda是什么_Python中lambda指的是什么
  12. Tableau数据源(一)-引入数据源
  13. Unity3D学习笔记(一):Unity简介、游戏物体、组件和生命周期函数
  14. 新笔记本安装网卡驱动出现The Realtek Ethernet Controller was not found.If Deep Sleep Mode is enabled
  15. 作为技术分析工具的 MTF 指标
  16. java计算机毕业设计高考报考指南网站源码+mysql数据库+系统+lw文档+部署
  17. 基于javafx和虹软ArcFace的高校新生人脸录入与识别系统
  18. 【Vuejs】953- Vue 项目性能优化技巧分享
  19. Leetcode_6_Z字形变换_模拟
  20. PS如何快速还原与恢复图片?

热门文章

  1. Premiere pro在图片中插入视频元素
  2. 当年我们一起追过的Java,Java SE 个人笔记
  3. 《捉妖记》的命格解析
  4. JSON树转换成线性列表(python)
  5. elasticsearch-8.0.0报错总结(ES)-持续更新
  6. Excel中提取单元格中的部分内容或单元格中的数字公式大全(提取数字,提取前几位,提取指定文字之间的内容等等)
  7. pta中c语言编程问题答案,pta题库答案_浙大远程教育2015秋 程序设计基础C 求PTA实验代码题库liujiahai-C答案_淘题吧...
  8. JMokit中的@Mocked与@Injectable区别
  9. Linux上svnserve “db/txn-current-lock: Permission denied“ 问题解决办法
  10. 微信web开发者工具、网易云音乐、为知笔记等软件崩溃无法打开等问题的解决