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之后的)

相关推荐
Wang's Blog2 分钟前
Java框架 SpringCloud 快速入门: Eureka 注册中心原理分析
java·spring cloud·eureka
她说彩礼65万6 分钟前
C语言 assert
java·linux·c语言
vx-程序开发8 分钟前
【计算机毕设】52744基于微信小程序的民宿智能预订系统
java·spring boot·毕业设计·源码·课程设计·毕设·大作业
萧瑟余晖21 分钟前
Spring Boot 配置体系详解
spring boot
Wang's Blog37 分钟前
Java框架 SpringCloud 快速入门: Eureka 服务注册
java·spring cloud·eureka
liangshanbo121541 分钟前
请求拦截器相关面试题
java·前端·javascript
她说彩礼65万1 小时前
C语言 const的使用
java·服务器·c语言
开开心心就好1 小时前
视频压缩工具推荐,绿色版免安装双击即用
java·前端·人工智能·spring·智能手机·intellij-idea·excel
Wang's Blog1 小时前
Java框架 SpringCloud 快速入门: Eureka 注册中心的搭建
java·spring cloud·eureka
专业程序开发源1 小时前
springboot古城景区管理系统88564-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计