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

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

但是我在webflux世界中找不到与之等效的东西。

作为一种解决方法,我正在使用以下内容,但这显然不是正确的方法
String path = serverWebExchange.getRequest().getURI().getPath();
if(path.contains("/protected/"))
<do-something>
WebFilterChain中是否有任何Spring Webflux本机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 状态的端点

10-01 22:38