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
相关产品推荐
相关产品推荐

