Spring Security是一项非常有用的技术。 它使您可以保护应用程序而不会过于侵入,并允许插入许多不同的身份验证机制。 另一方面,要使用它并不是那么容易,并且每次接触它时我都必须重新学习这些工具之一。 在这篇文章中,我将介绍Spring安全性的一些基础知识,以及如何使用它以不同的方式保护应用程序的不同部分。

Spring安全配置

让我们看一下Spring Security的一部分配置,您可以在Github上找到完整的源代码 。 我正在使用Spring Boot,但是对于所有Spring应用程序,大多数部分应该是相同的。

 @Configuration  public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .httpBasic() .and() .authorizeRequests().antMatchers( "/secret/**" ).authenticated() .and() .authorizeRequests().antMatchers( "/**" ).permitAll(); }  } 

在最简单的情况下,您只需使用Spring Security中常见的方法链接来配置HttpSecurity 。 在这种情况下,我们启用HTTP基本身份验证,并要求对一个端点进行身份验证( /secure/以下的所有内容)。 允许所有其他请求(以/**表示)。 此处使用的模式是Ant路径语法,但是您也可以使用不同的RequestMatcher来决定应用程序的哪些部分需要哪种身份验证。

Spring boot的所有功能都在过滤器链中实现。 上面对httpBasic()的调用实际上只是确保将相关过滤器添加到过滤器链中。 在这种情况下, BasicAuthenticationFilter将检查是否存在一个Authorization标头并对其进行评估。 如果找到一个,它将在上下文中添加一个Authentication对象,并执行其余的过滤器链。 在该链的末尾是FilterSecurityInterceptor ,它检查所请求的资源是否需要身份验证,以及所设置的资源是否符合所请求的角色。

您还可以通过配置WebSecurity将应用程序的某些部分从身份验证中WebSecurity 。 以下方法确保对/resources/所有请求都跳过上面的配置。

 @Override  public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers( "/resources/**" );  } 

在幕后,这将添加一个附加的过滤器链,该过滤器链针对配置的路径触发,但不执行任何操作。

多个过滤链

有时可能需要对应用程序的不同部分使用不同的身份验证机制。 为此,Spring Security允​​许您添加几个配置对象。 为此通常使用内部配置类,这些内部配置类也可以共享封闭应用程序的某些部分。 下列类添加了两个不同的Spring Security过滤器链。

 public class SecurityConfig { @Configuration public static class ApiConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { // doesn't really make sense to protect a REST API using form login but it is just for illustration http .formLogin() .and() .authorizeRequests().antMatchers( "/secret/**" ).authenticated() .and() .authorizeRequests().antMatchers( "/**" ).permitAll(); } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers( "/resources/**" ); } } @Order ( 1 ) @Configuration public static class ActuatorConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .antMatcher( "/management/**" ) .httpBasic() .and() .authorizeRequests().antMatchers( "/management/**" ).authenticated(); } @Override public void configure(WebSecurity web) throws Exception { super .configure(web); } }  } 

这两个类都继承自适配器配置类,并配置其HttpSecurity 。 这些类中的每一个都添加一个过滤器链,并执行第一个匹配的链。 @Order批注可用于影响过滤器链的顺序,以确保首先执行正确的过滤器链。

也可能有必要将过滤器链限制为仅应用程序的特定部分,以免其他部分触发该过滤器链。 ActuatorConfiguration被限制为仅将请求匹配到/management/ 。 请注意,配置中有两个不同的地方可以接受RequestMatcher 。 开头的一个限制了触发过滤链的网址。 authorizeRequests()之后的请求用于定义哪些请求需要哪种身份验证。

请注意,配置WebSecurity并不与HttpSecurity配置之一绑定,因为它们添加了自己的过滤器链,只是顺序可能有所不同。 如果在两种配置中都添加了模式,它甚至可以在WebSecurity的同一实例上WebSecurity

最后一件事:如果您使用的是自定义身份验证过滤器(例如,基于令牌的身份验证),则可能需要注意不要将过滤器也注册为Servlet过滤器。 您可以通过配置一个返回FilterRegistrationBean的方法并接受Filter的实例来影响它。 只要创建一个新的FilterRegistrationBean为您的过滤器,并设置enabledfalse

翻译自: https://www.javacodegeeks.com/2017/08/spring-security-multiple-filter-chains.html

Spring Security和多个过滤器链相关推荐

  1. Spring Security定义多个过滤器链(10)

      在Spring Security中可以同时存在多个过滤器链,一个WebSecurityConfigurerAdapter的实例就可以配置一条过滤器链.   我们来看如下一个案例: @Configu ...

  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 官方教程:Spring Security 架构

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

  7. [转载]spring security 的 logout 功能

    原文地址:spring security 的 logout 功能作者:sumnny 转载自:http://lengyun3566.iteye.com/blog/1114464 理解退出功能 术语退出( ...

  8. Java认证授权框架Spring Security介绍

    Spring Security 是一个非常强大的身份验证和授权控制框架.为了满足企业项目的不同需求,它提供了很多定制化开发的解决方案,通过简单的调整配置,就能为我们的应用提供一套可靠的安全保障.本节课 ...

  9. Spring Security 基本介绍,初窥路径

    Spring Security 基本介绍和环境搭建 实验介绍 Spring Security 是一个非常强大的身份验证和授权控制框架.为了满足企业项目的不同需求,它提供了很多定制化开发的解决方案,通过 ...

最新文章

  1. MySQL 慢查询日志分析及可视化结果
  2. 线程:创建--【J2SE】
  3. 别吵吵,分布式锁也是锁
  4. SD-SD用到的文本对象列表
  5. 递归与非递归法实现链表相加 CC150 V5 2.5题 java版
  6. centos下yum升级python到2.6
  7. ## CSP 201312-2 ISBN号码(C语言)(100分)
  8. js中将字符串作为函数名来调用的方法
  9. autojs 图片查找比对
  10. 信道编码与matlab仿真 刘东华,【网安学术】交织技术对信道编码的性能影响研究...
  11. js 时间转东八区_JS时区时间转换详解
  12. android 壁纸 官方网站,wallsplash - 壁纸从未如此精美 #Android
  13. Win10系统如何打开Guest账户?
  14. 防火墙相关知识,有备无患
  15. 乘风破浪、厚积薄发国产服务器软件: LinWin Http Server
  16. 别碰鼠标——让键盘飞起来
  17. 有关防火墙的调研总结
  18. 基于zynq的SGMII调试
  19. 最优化方法——QR Factorization
  20. 数值分析多种算法C语言代码

热门文章

  1. 【JVM】浅谈双亲委派和破坏双亲委派
  2. 谈谈HashMap线程不安全的体现
  3. 利用bootstraptable展示数据,对数据进行排序分页等操作
  4. 《走遍中国》珍藏版(十四)
  5. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——EmpDao层代码
  6. Sentinel控制台
  7. Ajax判断用户名是否可用
  8. 创建对象并且使用对象的属性和方法
  9. java如何连接mysql_Java如何连接数据库
  10. 下载bilibli网站视频