开发者

SpringCloudGateway 自定义局部过滤器场景分析

场景:

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

SpringCloudGateway 自定义局部过滤器场景分析

AllToOneGatewayFilterFactory
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.s编程pringframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.sphptereotype.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.filt编程客栈er(exchangehttp://www.devze.com);
        };
    }
    @Setter
    @Getter
    public static class Config {
        private String headerName;
        private String toPath;
    }
javascript}
 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之后的)

到此这篇关于SpringCloudGateway 自定义局部过滤器的文章就介绍到这了,更多相关SpringCloudGateway 过滤器内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜