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

相关推荐
Lanqing_0760几秒前
淘宝商品详情图API接口返回参数说明
java·服务器·前端·api·电商
矮油0_o8 分钟前
第一部分 -- ①语法分析的概要
java·编译器·解释器·语法分析
写bug写bug11 分钟前
Dubbo中SPI机制的实现原理和优势
java·后端·dubbo
浮游本尊12 分钟前
第2天Java学习作业 - 完整解答
java
一叶萩Charles15 分钟前
线程与进程(java)
java·开发语言
武昌库里写JAVA16 分钟前
iview组件库:当后台返回到的数据与使用官网组件指定的字段不匹配时,进行修改某个属性名再将response数据渲染到页面上的处理
java·开发语言·spring boot·学习·课程设计
攒了一袋星辰24 分钟前
Spring类型转换融入IOC生命周期
java·后端·spring
考虑考虑30 分钟前
Springboot3.4.x中的RestClient 和 RestTemplate
spring boot·后端·spring
老一岁30 分钟前
C++ 类与对象的基本概念和使用
java·开发语言·c++
代码代码快快显灵36 分钟前
定时器任务——若依源码分析
spring boot·定时任务·若依ai