Spring Security定义多个过滤器链(10)
在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)相关推荐
- Spring Security和多个过滤器链
Spring Security是一项非常有用的技术. 它使您可以保护应用程序而不会过于侵入,并允许插入许多不同的身份验证机制. 另一方面,要使用它并不是那么容易,并且每次接触它时我都必须重新学习这些工 ...
- Spring Security的内置过滤器是如何维护的?
Spring Security中的内置过滤器顺序是怎么维护的?我想很多开发者都对这个问题感兴趣.本篇我和大家一起探讨下这个问题. HttpSecurity包含了一个成员变量FilterOrderReg ...
- springBoot整合spring security+JWT实现单点登录与权限管理前后端分离
在前一篇文章当中,我们介绍了springBoot整合spring security单体应用版,在这篇文章当中,我将介绍springBoot整合spring secury+JWT实现单点登录与权限管理. ...
- springBoot整合spring security+JWT实现单点登录与权限管理前后端分离--筑基中期
写在前面 在前一篇文章当中,我们介绍了springBoot整合spring security单体应用版,在这篇文章当中,我将介绍springBoot整合spring secury+JWT实现单点登录与 ...
- spirng框架之spring security(一)
文章目录 目录 一.spring security 核心功能 二.配置用户存储及自定义登录页 三.防范CSRF攻击 四.退出及获取登录用户信息 五.Spring Security基本原理 六.自定义用 ...
- spring security:第一个程序解析
上一篇在一个项目里配置了spring security,这里大致说一些这些配置的作用. pom.xml 文件解析 <!-- spring security --><!-- sprin ...
- 【译】Spring 官方教程:Spring Security 架构
原文:Spring Security Architecture 译者:徐靖峰 校对:马超君 专题指南 本文是 Spring Security 的入门指南,并对 Spring Security 的框架设 ...
- 2021最新Spring Security知识梳理
2021最新Spring Security知识梳理 一.SpringSecurity 框架简介 Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spri ...
- Spring Security 安全框架
Spring Security 一. Spring Security 简介 1 概括 Spring Security 是一个高度自定义的安全框架.利用 Spring IoC/DI和 AOP 功能,为系 ...
最新文章
- 用html做12进制时钟特效,js+css3实现简单时钟特效
- 2019ICPC(上海) - Color Graph(二分图+状态压缩)
- OneAPM Cloud Test——系统性能监控神器
- 操作系统和数据库的知识梳理(思维导图)
- 07-OSPF区域类型--NSSA区域/完全NSSA区域
- 第11章 樱花树(《C和C++游戏趣味编程》配套教学视频)
- 常用的数据库软件各自有什么特点?
- js递归遍历json对象,js循环遍历json数组
- elasticsearch 更新数据 (部分字段更新)
- 社工小组 计算机小组活动,《社工小组活动常用游戏整理》
- python里lambda是什么_Python中lambda指的是什么
- Tableau数据源(一)-引入数据源
- Unity3D学习笔记(一):Unity简介、游戏物体、组件和生命周期函数
- 新笔记本安装网卡驱动出现The Realtek Ethernet Controller was not found.If Deep Sleep Mode is enabled
- 作为技术分析工具的 MTF 指标
- java计算机毕业设计高考报考指南网站源码+mysql数据库+系统+lw文档+部署
- 基于javafx和虹软ArcFace的高校新生人脸录入与识别系统
- 【Vuejs】953- Vue 项目性能优化技巧分享
- Leetcode_6_Z字形变换_模拟
- PS如何快速还原与恢复图片?
热门文章
- Premiere pro在图片中插入视频元素
- 当年我们一起追过的Java,Java SE 个人笔记
- 《捉妖记》的命格解析
- JSON树转换成线性列表(python)
- elasticsearch-8.0.0报错总结(ES)-持续更新
- Excel中提取单元格中的部分内容或单元格中的数字公式大全(提取数字,提取前几位,提取指定文字之间的内容等等)
- pta中c语言编程问题答案,pta题库答案_浙大远程教育2015秋 程序设计基础C 求PTA实验代码题库liujiahai-C答案_淘题吧...
- JMokit中的@Mocked与@Injectable区别
- Linux上svnserve “db/txn-current-lock: Permission denied“ 问题解决办法
- 微信web开发者工具、网易云音乐、为知笔记等软件崩溃无法打开等问题的解决