当前位置: 首页 > 知识库问答 >
问题:

WebFilter bean在安全的Spring Boot Webflux应用程序中调用了两次

督阿苏
2023-03-14

我使用Spring Boot 2.1. x与网络流量和安全性。我定义了一些类型的bean,它们被添加到MatcherSecurityWebFilterChain中。问题是,因为它们被定义为bean,所以它们也被添加在过滤链的末端,所以它们被执行两次。

对于Servlet应用程序,我们可以使用FilterAuthstrationBean来避免这种情况:

@Bean
    fun someFilterRegistrationBean() {
        val frb = FilterRegistrationBean(xxx)
        frb.setEnabled(false)
        return frb
    }

对于反应性应用程序,什么是等效的?

共有1个答案

巫坚白
2023-03-14

在本例中,我必须执行存储在TestGatewayFilter中的自定义逻辑,以修改SecurityWebFilterChain中最后的ServerWebExchange对象。如果我们创建TestGatewayFilter的bean并让spring处理它,我们会发现每个请求调用两次过滤器逻辑
我进行了研究,但没有找到在SpringWebFlux安全性中定义FilterRegistrationBean的方法,但在调试时发现了一种不同的方法作为一种解决方法,我创建了SecurityWebFilterChain的一个自定义bean,并在链的末尾注入了过滤器。为了防止spring两次注入这个过滤器,我们删除了创建它的bean的逻辑。现在,每个请求调用一次过滤器逻辑。

public class TestGatewayFilter implements WebFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        // To-Do logic
    }
}

@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
    http.addFilterAfter(new TestGatewayFilter(), SecurityWebFiltersOrder.AUTHORIZATION)
            .authorizeExchange()
            .anyExchange().authenticated();
    return http.build();
}

ServerHttpSecurity类提供了2种方法来添加一个过滤器在另一个过滤器之前或在链中的特定位置。它们采用与addFilterAfter()方法相同的参数集,并且可以以类似的方式使用:

addFilterBefore()
addFilterAt()

调试时,这是SecurityWebFilterChain中的过滤器执行顺序:

  1. ServerWebExChangeReactorContextWebFilter
  2. HttpHeaderWriterWebFilter
  3. CorsWebFilter
  4. ReactorContextWebFilter
  5. 身份验证WebFilter
  6. SecurityContextServerWebExChangeWebFilter
  7. 服务器请求CacheWebFilter
  8. LogoutWebFilter
  9. ExceptionTranslationWebFilter
  10. AuthorizationWebFilter
  11. TestGatewayFilter
 类似资料:
  • 我需要以下方面的帮助:我正在javafx中实现一个应用程序,这个应用程序是通过单击按钮调用的。问题是当我关闭应用程序时,我不能再次调用它。我读到过你不能多次调用Application.launch()方法。但是我在服务类上发现了一些东西。留档页面中的示例不是很清楚。有人知道如何做到这一点吗?谢谢。 http://docs.oracle.com/javafx/2/threads/jfxpub-thr

  • 攻击者无时无刻不在准备对你的 Web 应用程序进行攻击,因此提高你的 Web 应用程序的安全性是非常有必要的。幸运的是,来自The Open Web Application Security Project (OWASP) 的有心人已经整理了一份包含了已知安全问题和防御方式的全面的清单。这份清单对于具有安全意识的开发者来说是必读的。由 Padraic Brady 整理的 Survive The D

  • 千万不要轻视正确配置安全设置的重要性。如果不正确配置安全设置,不但会使您的 ASP 应用程序遭受不必要的篡改,而且会妨碍正当用户访问您的 .asp 文件。 Web 服务器提供了各种方法来保护您的 ASP 应用程序免受未授权的访问和篡改。在您读完本主题下的安全信息之后,请花一定的时间仔细检查一下您的 Windows NT 和 Web 服务器安全性文档。 NTFS 权限 您可以通过为单独的文件和目录应

  • 问题内容: 什么: NodeJS应用程序可以二进制形式分发吗?即。您通过V8将.js应用编译为其本机二进制文件,然后将该二进制文件分发给客户端?(如果您拥有对NodeJS服务器的全部访问权限)…还是正在缩小代码,您可以做些什么? 原因: 我们在NodeJS中为客户端构建服务器端应用程序,这些应用程序通常必须托管在客户端的服务器上。分发源代码意味着客户可以轻松地窃取我们的解决方案并停止支付许可费用。

  • 问题内容: 我正在使用SQL Server 2008。 我有一个表A,它在一秒钟内接受许多插入/更新。插入后,更新我想获取受影响的行数。 在执行查询时,同一查询可以由应用程序再次调用。因此,如果当前执行是 在INSERT之后但在IF块之前,该 怎么办。 您认为出于这个原因可能会给出错误的结果吗? 还是在它的上下文中总是安全的? 问题答案: 是的-它很安全。它始终引用当前查询中的上一个操作 但 如果

  • 运行应用程序时的问题:在Consol屏幕中 java.lang.SecurityException:权限拒绝:starting Intent{act=Android.Intent.action.main cat=[Android.Intent.category.launcher]flg=0x10000000 cmp=com.test.sample/.setting}from null(PID=91