Spring WebFlux添加WebFIlter以匹配特定路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring WebFlux添加WebFIlter以匹配特定路径相关的知识,希望对你有一定的参考价值。

在Spring启动应用程序的上下文中,我尝试添加WebFilter以仅过滤与特定路径匹配的请求。

到目前为止,我有一个过滤器:

    @Component
    public class AuthenticationFilter implements WebFilter {

        @Override
        public Mono<Void> filter(ServerWebExchange serverWebExchange,
                             WebFilterChain webFilterChain) {
        final ServerHttpRequest request = serverWebExchange.getRequest();

            if (request.getPath().pathWithinApplication().value().startsWith("/api/product")) {
               // logic to allow or reject the processing of the request
            }
        }
    }

我想要实现的是从过滤器中删除路径匹配并将其添加到其他更适合的地方,例如,从我到目前为止读到的,SecurityWebFilterChain

非常感谢!

答案

我也许是一种解决问题的更简洁方法。它基于UrlBasedCorsConfigurationSource中的代码。它使用适合您需求的PathPattern

@Component
public class AuthenticationFilter implements WebFilter {

    private final PathPattern pathPattern;

    public AuthenticationFilter() {
        pathPattern = new PathPatternParser().parse("/api/product");
    }

    @Override
    public Mono<Void> filter(ServerWebExchange serverWebExchange,
                         WebFilterChain webFilterChain) {
    final ServerHttpRequest request = serverWebExchange.getRequest();

        if (pathPattern.matches(request.getPath().pathWithinApplication())) {
           // logic to allow or reject the processing of the request
        }
    }
}

以上是关于Spring WebFlux添加WebFIlter以匹配特定路径的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用 Spring WebFlux WebFilter 结束请求并发送正确的响应?

如何使 WebFilter 在非 WebFlux/非反应式 Spring Boot 应用程序中工作?

Spring WebFlux 请求主体在测试中为空

更改 Spring Security WebFilter 的顺序

如何使用 Webflux 在 Spring API 处理程序方法中访问 JWT 声明?