Spring Cloud Gateway:如何在自定义过滤器中获取匹配路由的ID与URI
在Spring Cloud Gateway自定义过滤器中获取路由ID和URI
完全可以实现这两个需求,核心是从请求上下文ServerWebExchange中拿到当前匹配的路由实例,再从中提取需要的信息。
具体实现代码
import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.route.Route; import org.springframework.cloud.gateway.support.ServerWebExchangeUtils; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Component public class MyCustomFilter implements GatewayFilter { private static final Logger logger = LoggerFactory.getLogger(MyCustomFilter.class); @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 从请求上下文获取匹配到的路由对象 Route matchedRoute = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR); if (matchedRoute != null) { // 1. 获取并记录路由ID String routeId = matchedRoute.getId(); logger.info("当前匹配的路由ID: {}", routeId); // 2. 获取并记录路由定义的URI绝对路径 String routeUri = matchedRoute.getUri().toString(); logger.info("当前匹配的路由URI: {}", routeUri); } // 继续执行后续过滤器链 return chain.filter(exchange); } }
关键说明
ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR是Spring Cloud Gateway内置的属性key,专门用来存储当前请求匹配到的Route实例- 必须做非空判断:如果请求没有匹配到任何路由,
matchedRoute会是null,直接调用方法会触发空指针异常 - 日志输出尽量用SLF4J这类标准日志框架,不要用
System.out,方便后续日志管理和排查问题
内容的提问来源于stack exchange,提问作者Santosh Ksl
相关产品推荐
相关产品推荐

