首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring security -使用特定的匹配器创建2个过滤链

Spring Security - 使用特定的匹配器创建两个过滤链

基础概念

Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架。它允许开发者为基于 Spring 的应用程序提供安全控制。过滤链(Filter Chain)是 Spring Security 中的一个重要概念,它由一系列过滤器(Filter)组成,这些过滤器按照特定的顺序执行,以处理请求和响应。

相关优势

  1. 灵活性:可以根据不同的 URL 模式或请求类型应用不同的安全策略。
  2. 细粒度控制:可以为不同的用户角色或权限设置不同的访问规则。
  3. 集成方便:与 Spring 框架无缝集成,易于配置和使用。

类型

Spring Security 支持多种类型的过滤器,包括但不限于:

  • Authentication Filters:用于身份验证。
  • Authorization Filters:用于授权检查。
  • Exception Translation Filters:用于将底层安全异常转换为 Spring Security 的异常。
  • Filter Security Interceptor:用于在方法级别进行安全检查。

应用场景

在需要为不同的 URL 模式或请求类型应用不同的安全策略时,使用多个过滤链非常有用。例如:

  • 对于 API 端点,可能需要基于令牌的身份验证。
  • 对于管理界面,可能需要基于表单的身份验证和更严格的授权检查。

示例代码

以下是一个示例,展示如何使用特定的匹配器创建两个过滤链:

代码语言:txt
复制
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .securityMatcher("/api/**")
                .authorizeRequests()
                    .antMatchers("/api/public/**").permitAll()
                    .anyRequest().authenticated()
                    .and()
                .httpBasic()
            .and()
            .securityMatcher("/admin/**")
                .authorizeRequests()
                    .antMatchers("/admin/**").hasRole("ADMIN")
                    .and()
                .formLogin()
                .loginPage("/admin/login")
                .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user").password("{noop}password").roles("USER")
            .and()
            .withUser("admin").password("{noop}password").roles("ADMIN");
    }
}

解释

  1. securityMatcher:用于定义过滤链的匹配器。/api/** 匹配所有以 /api/ 开头的请求,/admin/** 匹配所有以 /admin/ 开头的请求。
  2. authorizeRequests:用于配置 URL 的访问权限。
  3. httpBasic:用于基于 HTTP 基本身份验证的安全策略。
  4. formLogin:用于基于表单的身份验证。

参考链接

通过这种方式,可以为不同的 URL 模式配置不同的安全策略,从而实现更灵活和细粒度的访问控制。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Spring Security 实战干货:过滤器链的机制和特性

    前言 过滤器作为 Spring Security 的重中之重,我们需要了解其中的机制。这样我们才能根据业务需求的变化进行定制。今天来探讨一下 Spring Security 中的过滤器链机制。...Spring Security 过滤器链 客户端(APP 和后台管理客户端)向应用程序发送请求,然后应用根据请求的 URI 的路径来确定该请求的过滤器链(Filter)以及最终的具体 Servlet 控制器...从上图我们可以看出 Spring Security 以一个单 Filter(FilterChainProxy) 存在于整个过滤器链中,而这个 FilterChainProxy 实际内部代理着众多的 Spring...” Spring Security 允许有多 条过滤器链并行,Spring Security 的 FilterChainProxy 可以代理多条过滤器链并根据不同的 URI 匹配策略进行分发。...总结 今天我们通过对 Spring Security 中 过滤器链机制,对于深入学习 Spring Security 有着至关重要的意义。有什么问题和心得请留言反馈。

    46010

    Spring Security 6.x 过滤器链SecurityFilterChain是如何工作的

    上一篇主要介绍了Spring Secuirty中的过滤器链SecurityFilterChain是如何配置的,那么在配置完成之后,SecurityFilterChain是如何在应用程序中调用各个Filter...一、Filter背景知识因为Spring Security底层依赖Servlet的过滤器技术,所以先简单地回顾一下相关背景知识。...,它组成了真正的“过滤器链”,下面是FilterChain的实现类ApplicationFilterChain的部分源码:当请求到达Servlet容器时,就会创建出一个FilterChain实例,然后调用...,到这里请求才算是进入了我们使用HttpSecurity配置的各个Filter,而在执行SecurityFilterChain的前后位置,又可以统一添加一些处理,例如添加Spring Security的防火墙...VirtualFilterChain,这才是实际意义上过滤器链执行的入口。

    43520

    「Spring」认证安全架构指南

    但是,这样做,我们可以清除使用 Spring Security 的开发人员遇到的一些困惑。为此,我们通过使用过滤器,更一般地,通过使用方法注解,来看看在 Web 应用程序中应用安全性的方式。...创建和自定义过滤器链Spring Boot 应用程序(具有请求匹配器的应用程序)中的默认后备过滤器链/**具有预定义的SecurityProperties.BASIC_AUTH_ORDER....一旦决定应用特定的过滤器链,就不会应用其他过滤器链。...一种是整个过滤器链的请求匹配器,另一种只是选择要应用的访问规则。...如果您希望您的应用程序安全规则应用于执行器端点,您可以添加一个比执行器更早排序的过滤器链,并且该过滤器链具有包含所有执行器端点的请求匹配器。

    96730

    Spring认证-Spring 安全架构专题教程

    但是,通过这样做,我们可以消除使用 Spring Security 的开发人员所遇到的一些困惑。为此,我们通过使用过滤器,更一般地说,通过使用方法注释来查看在 Web 应用程序中应用安全性的方式。...可以有多个过滤器链,所有过滤器链都由同一顶层的 Spring Security 管理,FilterChainProxy并且容器都不知道所有过滤器链。...创建和自定义过滤器链 Spring Boot 应用程序(带有/**请求匹配器的应用程序)中的默认回退过滤器链的预定义顺序为SecurityProperties.BASIC_AUTH_ORDER. ...一旦决定应用特定的过滤器链,就不会再应用其他过滤器链。...一个是整个过滤器链的请求匹配器,另一个是只选择要应用的访问规则。

    72520

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

    我们仅涉及应用程序安全性的基础知识,但这已足够消除开发人员在使用 Spring Security 时遇到的一些困惑。要做到这一点,我们需要了解如何使用过滤器和方法注解来保障Web应用程序的安全性。...在同一个顶级 FilterChainProxy中,可以有多个由 Spring Security 管理的过滤器链,并且容器都是未知的。...创建和自定义过滤器链 Spring Boot 应用程序(具有 /**请求匹配程序的应用程序)中的默认失败回调过滤器链具有预定义的 SecurityProperties.BASIC_AUTH_ORDER...一旦决定采用特定的过滤器链,则不会应用其他过滤器。 但是在一个过滤链中,通过在HttpSecurity配置器中设置额外的匹配器,可以对授权进行更细粒度的控制。...Security 最容易犯的一个错误是忘记这些匹配器适用于不同的进程,一个是整个过滤器链的请求匹配器,另一个只是选择应用的访问规则。

    1.8K70

    【Spring Security】002-Spring Security基本原理:过滤器链、过滤器加载过程、UserDetailsService接口、PasswordEncoder接口

    一、过滤器链 1、概述 SpringSecurity 本质是一个过滤器链,有很多过滤器; 从启动是可以获取到过滤器链: org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFil...: 是一个方法级的权限过滤器, 基本位于过滤链的最底部; super.beforeInvocation(fi);//表示查看之前的 filter 是否通过; fi.getChain().doFilter...; UsernamePasswordAuthenticationFilter: 对/login 的 POST 请求做拦截,校验表单中用户名,密码; 二、过滤器加载过程 使用Spring Security...Spring Security 定义生成的。...Security 官方推荐的密码解析器,平时多使用这个解析器; BCryptPasswordEncoder 是对 bcrypt 强散列方法的具体实现,是基于 Hash 算法实现的单向加密,可以通过 strength

    11110

    《设计模式》总结和在spring框架的实践

    这是一个数据源的特定配置,它在得到 SessionFactory 的对象之前被使用。对此,在一致的情况下可以用 LocalSessionFactoryBean 获取特定的数据源配置。...MockMvcWebClientBuilder 适配器模式 Spring 框架使用适配器模式来实现很多功能。...代理模式 Spring 框架使用 Spring AOP 模块中的代理模式。在 Spring AOP 中,笔者可以创建对象的代理来实现横切关注点。...在 Spring 中,其他模块也实现了代理模式,如 RMI、 Spring 的 HTTP 调用、Hessian 和 Burlap。 责任链模式 Spring Security 项目实现了责任链模式。...Spring Security 允许通过使用安全过滤器链在应用程序中实现身份验证和授权功能。这是一个高度可配置的框架。由于使用了责任链设计模式,我们可以在过滤器链上添加自定义过滤器以自定义功能。

    44310

    Spring Security 基本介绍及基础项目搭建

    同款产品对比shiro Spring Security 是 Spring 家族中的一个安全管理框架,实际上,在 Spring Boot 出现之 前,Spring Security 就已经发展了多年了,但是使用的并不多...相对于 Shiro,在 SSM 中整合 Spring Security 都是比较麻烦的操作,所以,Spring Security 虽然功能比 Shiro 强大,但是使用反而没有 Shiro 多(Shiro...自从有了 Spring Boot 之后,Spring Boot 对于 Spring Security 提供了自动化配置方 案,可以使用更少的配置来使用 Spring Security。...SpringSecurity 基本原理 过滤器链 SpringSecurity 本质是一个过滤器链: 从启动是可以获取到过滤器链: org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFil...:是一个方法级的权限过滤器, 基本位于过滤链的最底部。

    35121

    漫谈设计模式在 Spring 框架中的良好实践

    这是一个数据源的特定配置,它在得到 SessionFactory 的对象之前被使用。对此,在一致的情况下可以用 LocalSessionFactoryBean 获取特定的数据源配置。...MockMvcWebClientBuilder 适配器模式 Spring 框架使用适配器模式来实现很多功能。...代理模式 Spring 框架使用 Spring AOP 模块中的代理模式。在 Spring AOP 中,笔者可以创建对象的代理来实现横切关注点。...在 Spring 中,其他模块也实现了代理模式,如 RMI、 Spring 的 HTTP 调用、Hessian 和 Burlap。 责任链模式 Spring Security 项目实现了责任链模式。...Spring Security 允许通过使用安全过滤器链在应用程序中实现身份验证和授权功能。这是一个高度可配置的框架。由于使用了责任链设计模式,我们可以在过滤器链上添加自定义过滤器以自定义功能。

    62110

    漫谈设计模式在 Spring 框架中的良好实践

    这是一个数据源的特定配置,它在得到 SessionFactory 的对象之前被使用。对此,在一致的情况下可以用 LocalSessionFactoryBean 获取特定的数据源配置。...MockMvcWebClientBuilder 适配器模式 Spring 框架使用适配器模式来实现很多功能。...代理模式 Spring 框架使用 Spring AOP 模块中的代理模式。在 Spring AOP 中,笔者可以创建对象的代理来实现横切关注点。...在 Spring 中,其他模块也实现了代理模式,如 RMI、 Spring 的 HTTP 调用、Hessian 和 Burlap。 责任链模式 Spring Security 项目实现了责任链模式。...Spring Security 允许通过使用安全过滤器链在应用程序中实现身份验证和授权功能。这是一个高度可配置的框架。由于使用了责任链设计模式,我们可以在过滤器链上添加自定义过滤器以自定义功能。

    1.2K30

    新版Spring Security 中的路径匹配方案!

    在 Spring Security 中,路径匹配是权限控制的核心部分,它决定了哪些请求可以访问特定的资源。本文将详细介绍 Spring Security 中的路径匹配策略,并提供相应的代码示例。...AntPathRequestMatcher AntPathRequestMatcher 是 Spring 中最常用的请求匹配器之一,它使用 Ant 风格的路径模式来匹配请求的 URI。...例如,你可以使用 Ant 风格的路径模式来指定哪些 URL 路径需要特定的权限或角色。...总结 Spring 提供了多种 RequestMatcher 实现类,以满足不同的请求匹配需求。通过合理地使用这些匹配器,可以灵活地定义和实施安全策略。...在实际应用中,你可能需要根据业务需求选择合适的匹配器,并结合 Spring Security 的配置来实现细粒度的访问控制。

    64820

    不得不知道的Spring Security的基本原理

    Spring Security的默认配置 默认情况下,在项目中有Spring Security相关的jar包。Spring Security会自动帮我们做一些安全的配置。...首先创建一个继承继承WebSecurityConfigurerAdapter的类,它是Spring Security提供的web安全的适配器类,然后重写configure(HttpSecurity http...Spring Security的基本原理 Spring Security最核心的东西是一个过滤器链,这些过滤器在Spring boot启动的时候会帮我们配置上。 ?...其他过滤器认证处理同理,如果有一个请求认证成功了,他就对请求标记。过滤器链最后一环是FilterSecurityInterceptor,这个过滤器会读取我们的配置,来校验请求有没有权限访问最终的服务。...这就是Spring Security最基本的原理,Spring Security的功能都是建立在这个过滤器链基础上的。需要注意的是,认证的过滤器我们是可以通过配置来控制是否生效的,而其他的过滤器不行。

    1.3K10

    一个接口是如何在Keycloak和Spring Security之间执行的

    在上一篇我们对Keycloak的常用配置进行了熟悉,今天我们来对Keycloak适配Spring Security的执行流程做一个分析,简单了解一下其定制的一些Spring Security过滤器。...Security常规的内置过滤器外还加入了Keycloak适配器的几个过滤器,结合执行流程来认识一下它们。...KeycloakPreAuthActionsFilter 这个过滤器的作用是暴露一个Keycloak适配器对象PreAuthActionsHandler给Spring Security。...而这个适配器的作用就是拦截处理一个Keycloak的职能请求处理接口,这些内置接口都有特定的后缀: // 退出端点 public static final String K_LOGOUT = "k_logout...我把开启Keycloak适配器的注解拆解开以打开Spring Security的日志: @Configuration @ComponentScan( basePackageClasses

    2K20

    【SpringSecurity】快速入门—通俗易懂

    UserDetailsService是Spring Security中的一个接口,它有一个方法loadUserByUsername,用于根 据用户名获取用户信息。...总的来说,这段代码的目的是配置Spring Security的注销功能,使得所有用户都可以注销,并且当 他们注销成功后,他们将被重定向到应用程序的"/index"页面。...从 Spring Security 4.0 开始,默认情况下会启用 CSRF 保护,以防止 CSRF 攻击应用 程序, Spring Security CSRF 会针对 PATCH...开启CSRF后,Spring Security会添加一个CSRF令牌到表单提交的请求中,以确保只有合法的请 求才能被处理。...System.out.println(t.getId()+"\t"+t.getUsername()); }); return list; } 8.原理解析 SpringSecurity本质:其实就是一个过滤器链

    52740
    领券