Spring Boot Webflux中Filter组件通过ServerWebExchange获取原始路由路径
在Spring WebFlux Filter中获取路由路径模式
针对你用RouterFunction定义的带路径变量的路由(如hello/{test}),可以通过以下方式在Filter中借助ServerWebExchange获取原始路径模式:
核心原理
Spring WebFlux在路由匹配成功后,会将路由相关信息存入ServerWebExchange的属性中,属性键为RouterFunctions.ROUTE_ATTRIBUTE,对应的属性值是RouterFunction.Route对象,从中可以提取出原始的路径模式。
代码实现示例
@Component public class RoutePatternFilter implements GlobalFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 从ServerWebExchange中获取路由属性 Object routeAttr = exchange.getAttribute(RouterFunctions.ROUTE_ATTRIBUTE); if (routeAttr instanceof RouterFunction.Route route) { RequestPredicate predicate = route.predicate(); // 判断是否为路径匹配断言(对应你定义的GET("hello/{test}")中的路径规则) if (predicate instanceof PathPredicate pathPredicate) { // 获取原始路径模式 String pathPattern = pathPredicate.getPattern(); // 此处可根据业务需求使用pathPattern,比如打印日志 System.out.println("匹配的路由路径模式:" + pathPattern); } } return chain.filter(exchange); } }
注意事项
- 该属性仅在请求成功匹配到路由时存在,未匹配到任何路由时
routeAttr会为null,需做非空判断。 - 如果路由使用了组合断言(比如同时匹配请求方法和路径),需要根据实际断言类型做相应的类型转换,上述示例针对的是最常见的路径断言场景。
内容的提问来源于stack exchange,提问作者tony
相关产品推荐
相关产品推荐

