我试图在Spring Webflux中编写一个过滤器,但是找不到用于仅将过滤器应用于某些URL模式的选项。在Spring MVC世界中,可以使用
$myVmss = Get-AzVmss -ResourceGroupName myRg -Name myVmss
$ipConfig = New-AzVmssIpConfig `
-Name myNewConfig `
-SubnetId $mySubnetId ` # replace with id of subnet
-LoadBalancerBackendAddressPoolsId $backendPoolId # replace with id of backend pool
Add-AzVmssNetworkInterfaceConfiguration `
-Name myNewConfig `
-Primary $true `
-IpConfiguration $ipConfig `
-VirtualMachineScaleSet $myVmss `
$myVmss | Update-AzVmss
但是我在webflux世界中找不到与之等效的东西。
作为一种解决方法,我正在使用以下内容,但这显然不是正确的方法
FilterRegistrationBean.addUrlPatterns("/protected/*");
String path = serverWebExchange.getRequest().getURI().getPath();
if(path.contains("/protected/"))
<do-something>
中是否有任何Spring Webflux本机URL模式匹配方法可用于将过滤器仅应用于一组特定的URL?谢谢!
答案 0 :(得分:1)
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
时处于活动状态的端点