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

Spring Cloud Gateway如何将路径参数传入自定义过滤器

Spring Cloud Gateway自定义过滤器提取路径参数并接收配置参数

1. 实现自定义过滤器及工厂类

Spring Cloud Gateway的自定义过滤器需要通过过滤器工厂来接收配置文件中的参数,路径参数则可直接从请求上下文提取。

第一步:定义过滤器配置类

用来接收application.yaml中传入的额外参数:

public class MyCustomFilterConfig {
    private String extraParam; // 示例额外参数,可根据需求添加更多字段

    // getter和setter
    public String getExtraParam() {
        return extraParam;
    }

    public void setExtraParam(String extraParam) {
        this.extraParam = extraParam;
    }
}

第二步:实现自定义过滤器工厂

继承AbstractGatewayFilterFactory,同时编写过滤器核心逻辑:

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;

@Component
public class MyCustomFilterFactory extends AbstractGatewayFilterFactory<MyCustomFilterConfig> {

    public MyCustomFilterFactory() {
        super(MyCustomFilterConfig.class);
    }

    @Override
    public GatewayFilter apply(MyCustomFilterConfig config) {
        return (exchange, chain) -> {
            // 1. 从路由匹配结果中提取路径参数employeeId
            String employeeId = exchange.getRequest().getPathVariables().get("employeeId");
            
            // 2. 获取配置文件传入的额外参数
            String extraParam = config.getExtraParam();
            
            // 此处编写你的业务逻辑,比如参数校验、请求头修改、日志记录等
            System.out.println("提取到employeeId: " + employeeId);
            System.out.println("配置传入的extraParam: " + extraParam);
            
            // 继续执行过滤器链
            return chain.filter(exchange);
        };
    }
}

2. 配置application.yaml

在simple_route路由中配置自定义过滤器,传入额外参数:

spring:
  cloud:
    gateway:
      routes:
        - id: simple_route
          uri: http://your-target-service:port # 替换为实际目标服务地址
          predicates:
            - Path=/employees/{employeeId} # 路径匹配规则,包含employeeId参数
          filters:
            - name: MyCustomFilter # Spring会自动识别去掉Factory后缀的过滤器工厂名称
              args:
                extraParam: "custom-value-123" # 传入的额外参数,可自定义

关键说明

  • 路径参数employeeId无需在配置中显式传入,路由的Path断言匹配后,会自动将参数存入请求上下文,通过getPathVariables()即可提取。
  • 过滤器工厂类名后缀为Factory,配置时只需写前缀(如MyCustomFilterFactory对应配置中的MyCustomFilter),Spring会自动扫描识别。
  • 若需要多个配置参数,只需在MyCustomFilterConfig中添加对应字段并提供getter/setter,然后在yaml的args节点下补充配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:15:04