gpt4 book ai didi

java - Spring Webflux WebFilterChain 中的 URL 模式过滤

转载 作者:行者123 更新时间:2023-12-02 07:49:50 27 4
gpt4 key购买 nike

我正在尝试在 Spring Webflux 中编写一个过滤器,但无法找到仅将过滤器应用于某些 URL 模式的选项。在 Spring MVC 世界中,这可以通过使用来实现

FilterRegistrationBean.addUrlPatterns("/protected/*");

但我无法在 webflux 世界中找到它的等价物。

作为解决方法,我使用以下方法,但这显然不是正确的方法

String path = serverWebExchange.getRequest().getURI().getPath();
if(path.contains("/protected/"))
<do-something>

WebFilterChain 中是否有任何 Spring Webflux native URL 模式匹配方法,我可以使用该方法将过滤器仅应用于一组特定的 URL?谢谢!

最佳答案

Webflux 和 Spring MVC 不一样,因此您不能指望这两个库具有相同的功能。

如果你查看 webflux 中的 CorsWebFilter 类,你会发现它们已经实现了自己注册的路径。

他们在 UrlBasedCorsConfigurationSource 中设置路径,然后在其中使用 PathPatternParser 将配置注册到每个路径。

/**
* Register a {@link CorsConfiguration} for the specified path pattern.
*/
public void registerCorsConfiguration(String path, CorsConfiguration config) {
this.corsConfigurations.put(this.patternParser.parse(path), config);
}

注册cors过滤器:

@Bean
public CorsWebFilter corsWebFilter() {
final CorsConfiguration config = new CorsConfiguration();

final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);

return new CorsWebFilter(source);
}

所以你正在寻找的东西并不具体存在,但是通过查看 Spring 代码,你可以看到它们在做什么,并构建一些类似的东西来满足你的需要。

另一种选择是使用 Routerfunction::filter 并实现 HandlerFilterFunction,仅将过滤器注册到您希望其处于 Activity 状态的端点。

关于java - Spring Webflux WebFilterChain 中的 URL 模式过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56532741/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com