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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:15:40