SpringCloudGateway 自定义局部过滤器

场景:

将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务

复制代码
AllToOneGatewayFilterFactory
java 复制代码
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class AllToOneGatewayFilterFactory extends AbstractGatewayFilterFactory<AllToOneGatewayFilterFactory.Config> {
    public AllToOneGatewayFilterFactory() {
        super(Config.class);
    }

    @Override
    public GatewayFilter apply(Config config) {
        return (exchange, chain) -> {

            ServerHttpRequest request = exchange.getRequest();
            request.getURI();
            // 替换路径
            String path = request.getPath().toString();
            ServerHttpRequest modifiedRequest = request.mutate().header(config.headerName, path).path(config.getToPath()).build();
            exchange = exchange.mutate().request(modifiedRequest).build();

            log.info("AllToOne: headers{{}:{}}, {} ---> {}", config.getHeaderName(),path, request.getURI(), modifiedRequest.getURI());

            return chain.filter(exchange);
        };
    }
    
    @Setter
    @Getter
    public static class Config {
        private String headerName;
        private String toPath;

    }
}
bash 复制代码
 spring:
  cloud:
    gateway:
      httpclient:
        ssl:
          useInsecureTrustManager: true
      routes:
       - id: AllToOne_fnpt
         uri: http://localhost:19982
         predicates:
           - Path=/**
         filters:
           - name: AllToOne
             args:
               headerName: api-path
               toPath: /api/unified

注意:1.类名必须以GatewayFilterFactory结尾否则会出现不识别 的情况

2.配置的filters -name 的值为类的前缀(截取GatewayFilterFactory之后的)

相关推荐
花哥码天下33 分钟前
apifox登录后设置token到环境变量
java·后端
浩瀚地学1 小时前
【Java】常用API(二)
java·开发语言·经验分享·笔记·学习
hashiqimiya2 小时前
springboot事务触发滚动与不滚蛋
java·spring boot·后端
因我你好久不见2 小时前
Windows部署springboot jar支持开机自启动
windows·spring boot·jar
PPPHUANG2 小时前
一次 CompletableFuture 误用,如何耗尽 IO 线程池并拖垮整个系统
java·后端·代码规范
恩创软件开发2 小时前
创业日常2026-1-8
java·经验分享·微信小程序·小程序
无关86883 小时前
SpringBootApplication注解大解密
spring boot
想用offer打牌3 小时前
一站式了解Spring AI Alibaba的流式输出
java·人工智能·后端