You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring WebFlux中如何为WebFilter指定生效的访问路径

方案1:Filter内部做路径匹配(适配注解式Controller场景,改动最小)

Spring WebFlux没有和Servlet体系中FilterRegistrationBean完全对等的全局路径配置机制,最简单的实现是直接在WebFilter内部通过官方提供的PathPatternParser做路径匹配判断:

@Component
public class RequestIdFilter implements WebFilter {
    private final List<PathPattern> validPathPatterns;

    // 也可以把路径配置放到配置文件,通过@Value注入,不用硬编码
    public RequestIdFilter() {
        PathPatternParser patternParser = new PathPatternParser();
        validPathPatterns = List.of(
            patternParser.parse("/v1/**"),
            patternParser.parse("/v2/**")
        );
    }

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        PathContainer requestPath = exchange.getRequest().getPath().pathWithinApplication();
        // 只有匹配到指定路径才执行自定义逻辑
        boolean needProcess = validPathPatterns.stream()
                .anyMatch(pattern -> pattern.matches(requestPath));
        if (needProcess) {
            // 你的原有过滤器逻辑写在这里
        }
        return chain.filter(exchange);
    }
}

方案2:路由绑定Filter(适配函数式路由场景)

如果你用的是WebFlux的函数式路由写法,可以直接把Filter绑定到对应路径的路由分组上,不需要做额外的路径判断:

@Configuration
public class WebRouterConfig {
    @Bean
    public RouterFunction<ServerResponse> apiRouter(RequestIdFilter requestIdFilter, ApiHandler apiHandler) {
        return RouterFunctions.route()
                // 绑定v1路径组的过滤器
                .path("/v1", v1Builder -> v1Builder
                        .filter(requestIdFilter)
                        .GET("/info", apiHandler::getV1Info)
                        // 其他v1接口定义
                )
                // 绑定v2路径组的过滤器
                .path("/v2", v2Builder -> v2Builder
                        .filter(requestIdFilter)
                        .GET("/info", apiHandler::getV2Info)
                        // 其他v2接口定义
                )
                .build();
    }
}

注意事项

WebFlux使用的PathPattern语法和Servlet中的路径匹配规则略有不同:/**匹配所有层级的子路径,/*仅匹配单层级路径,配置规则时注意根据实际需求选择通配符。

内容的提问来源于stack exchange,提问作者Ilya Y

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:15:05