Spring Security Reactive WebFilterChainProxy 仅调用单个过滤器链

2023-12-09

我需要向基于 Webflux 的应用程序添加安全性,并且有一些要求意味着我需要添加多个过滤器链。然而,目前的实施WebFilterChainProxy uses Flux.filterWhen(...)如果我正确阅读文档,它只会返回链中的第一个匹配项。

鉴于上述我有三个问题:-

  1. 我的反应知识非常有限,有人可以确认我的理解吗filterWhen是否正确?

  2. 如果是这样,有人可以建议一种方法让多个过滤器链在新的 Spring Security 5 响应式模型中工作吗?

  3. 如果我误解了 filterWhen 方法的工作原理,任何人都可以提出任何建议,为什么只处理我的过滤器链之一?

我向链添加过滤器的方式是使用多种配置方法,并用注释@Order,类似于下面的代码块。

@Configration
@EnableWebFluxSecurity
public class SecurityConfig
    ...
    @Bean
    @Order(1)
    SecurityWebFilterChain chain1(ServerHttpSecurity http) {
        return http.httpBasic().disable()......
    }

    @Bean
    @Order(2)
    SecurityWebFilterChain chain2(ServerHttpSecurity http) {
        return http.httpBasic().disable()......
    }

    @Bean
    @Order(3)
    SecurityWebFilterChain chain3(ServerHttpSecurity http) {
        return http.httpBasic().disable()......
    }
    ...
}

当我调试应用程序时,我可以看到所有三个过滤器都已添加到WebFilterChainProxy但我只得到一个匹配的过滤器。我需要找到一种返回所有匹配的过滤器的方法。

有人可以帮忙吗?


我终于能够通过使用解决这个问题服务器Web交换匹配器。我的用例涉及在访问 Spring Actuator 端点时启用基本身份验证,而在其他路径上不进行身份验证。我能够通过以下代码完成此任务:

@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity httpSecurity) 
{
    httpSecurity
            .csrf().disable()
            .logout().disable()
            .formLogin().disable();


 httpSecurity.securityMatcher(ServerWebExchangeMatchers.pathMatchers("/actuator/**"))
            .httpBasic()
            .and()
            .authorizeExchange()
            .pathMatchers("/actuator/**")
            .hasRole(ACTUATOR_ADMIN_ROLE);

    return httpSecurity.build();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Security Reactive WebFilterChainProxy 仅调用单个过滤器链 的相关文章

随机推荐

  • 在没有 xts 对象的情况下在 PortfolioAnalytics 中创建有效前沿

    有没有办法在 PortfolioAnalytics 包中创建有效前沿而不指定资产回报的 xts 对象 相反 我想提供预期回报向量和协方差矩阵 有两种方法 首先 您可以提供一个包含矩阵的列表 其结构如下所示 然后调用 Optimize por
  • 在 Mac 应用程序中的保存对话框中包含 iCloud

    我已经实施了iCloud支持我的 Mac 基于文档的应用程序 NSDocument子类可以处理本地存储上打开的保存文件 并且iCloud 但是 我可以将我的文件上传到iCloud只需将其拖动到 打开新文件 面板上即可 当应用程序提示用户保存
  • 如何区分 EOF 字符和实际的文件结尾?

    When reading a file I understand the last character provided is an EOF Now what happens when I have an EOF character in
  • Mojarra 2.0.3 中复合组件所需属性抛出异常

    我一直在使用 JSF 2 0 复合组件 但我对其中的 require 属性有点困惑composite attribute标签的意思是做 文档指出 如果页面作者必须提供此属性的值 则必需的属性为 true 我将其解释为必须为所有具有复合属性的
  • apollo-android可以用作java客户端吗?

    我正在开发一个需要与 Github GraphQl API 通信的 Spring Boot 应用程序 apollo android 可以用于此目的吗 由于所有可用的稀缺文档以及示例项目都是用 android 编写的 所以我不确定 维护者在这
  • 获取距离直线最近的点

    我想要一个直接的 C 函数来获取距离线段 AB 最近的点 从点 P 抽象函数可能如下所示 我已经搜索过了 但没有找到可用的 由我 解决方案 public Point getClosestPointFromLine Point A Point
  • Pandas:根据子字符串删除重复项[重复]

    这个问题在这里已经有答案了 我有以下两列 来自 Pandas DataFrame antecedents consequents apple orange orange apple apple water apple pineapple w
  • 检查 PDO 是否存在的最佳方法是什么[重复]

    这个问题在这里已经有答案了 有人告诉我 rowCount 不安全 所以我想在这里问它 我有 2 个例子 想知道检查某些东西是否存在的最安全和最好的方法是什么 sql SELECT count FROM users WHERE usernam
  • 更改 XML 序列化中元素的类型

    我在 XML 序列化方面遇到了巨大的问题 我有两个类 都需要可序列化 在继承的类中 我想更改序列化行为 以便将字符串属性序列化为复杂类型 public class Animal XmlElement ElementName NAME pub
  • 使用 $ 符号为上一行中存在的变量赋值

    我正在尝试了解 MS DOS v2 0源代码 特别是其中的一些代码MSDATA ASM 该代码最初是使用 35 多年历史的 MASM 汇编器 未商用的版本 进行汇编的 我感兴趣的代码就在开头附近 SUBTTL Initialized dat
  • 如何在两个项目共享的xaml文件中添加用户控件的引用

    I have created a class library CustomMapControl in the solution and inside this class library I create a UserControl Map
  • 如何在Android Studio中创建发布Android库包(AAR)(不是调试)

    我已经构建了我的 Android 库包 AAR 并且构建的结果被创建在 app build outputs aar 文件夹 这个文件夹中的文件名为 app debug aar 所以我猜它是在调试模式下构建的 所以我想知道如何生成构建的版本
  • 在 Angular4 的输入字段中添加千位分隔符

    我在前端使用 Angular 4 我想在输入字段中插入千位分隔符 我尝试了这段代码 但它不起作用
  • 获取我的应用程序中其他应用程序(进程)的上下文:Android

    在我的应用程序中 我需要访问其他已安装应用程序的上下文 是否可以使用任何应用程序的包名称获取上下文 如果我访问其他应用程序的上下文 会出现任何安全问题吗 任何帮助将不胜感激 try this public abstract Context
  • 说话人识别[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我如何区分两个人说话 就像有人说 你好 然后另一个人说 你好 我应该在音频数据中寻找什么样的签名 周期性 非常感谢任何能回答这个问题的人 这个问题的解决方案在于数字信号处理 DS
  • 检查电子邮件,然后根据脚本对短信做出反应

    好的 我希望在 Linux 机器上执行此操作 我需要能够接收短信 毫无疑问 它会通过电子邮件到达 然后采取行动 例如 一条消息带有日期 时间和名称 然后我需要将该信息导出到 SQL 数据库 任何人都可以快速轻松地解决此问题 我想我现在已经对
  • 为什么Java中相同的整数值有不同的内存地址? [复制]

    这个问题在这里已经有答案了 今天是我第一次尝试Java语言 当我尝试这段代码时 我感觉很奇怪 int a 500 System out println System identityHashCode 500 System out print
  • R:将 POSIXct 类分配给数据框

    当我将 POSIXct 对象分配给数据帧时 它会将其转换为等效的整数 例如 gt x lt as data frame matrix nrow 1 ncol 2 gt x V1 V2 1 NA NA gt x 1 1 lt as POSIX
  • 如何使用c#读取二进制文件?

    我有一个二进制文件 我不知道如何使用 C 读取这个二进制文件 C 中描述的二进制文件中记录的定义是 define SIZEOF FILE 10 1024 Size of 1234 dat file is 10480 32 byte 32 s
  • Spring Security Reactive WebFilterChainProxy 仅调用单个过滤器链

    我需要向基于 Webflux 的应用程序添加安全性 并且有一些要求意味着我需要添加多个过滤器链 然而 目前的实施WebFilterChainProxy uses Flux filterWhen 如果我正确阅读文档 它只会返回链中的第一个匹配