我正在尝试在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 状态的端点