spring cloud gateway 의 stripPrefix 설정

순서.
본 고 는 주로 spring cloud gateway 의 stripPrefix 설정 을 연구 하고 자 한다.
zuul 설정 사용 하기
zuul:
  routes:
    demo:
      sensitiveHeaders: Access-Control-Allow-Origin,Access-Control-Allow-Methods    
      path: /demo/**
      stripPrefix: true
      url: http://demo.com.cn/

이 곳 의 stripPrefix 는 기본적으로 true 입 니 다. 즉, 모든 / demo / xxxx 요청 을 전달 합 니 다.http://demo.com.cn/xxxx demo 접두사 제거
spring cloud gateway 설정 사용 하기
spring:
  cloud:
    gateway:
      default-filters:
      - AddResponseHeader=X-Response-Default-Foo, Default-Bar
      routes:
      - id: demo
        uri: http://demo.com.cn:80
        order: 8999 ##      
        predicates: 
        - Path=/demo/**
        filters:
        - RewritePath=/demo/(?.*), /$\{segment}

spring cloud gateway 는 기 존의 stripPrefix 설정 이 없 는 것 같 지만 rewritepath 를 통 해 이 루어 질 수 있 습 니 다.
spring-cloud-gateway-core-2.0.0.M6-sources.jar!/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactory.java
public class RewritePathGatewayFilterFactory implements GatewayFilterFactory {

    public static final String REGEXP_KEY = "regexp";
    public static final String REPLACEMENT_KEY = "replacement";

    @Override
    public List argNames() {
        return Arrays.asList(REGEXP_KEY, REPLACEMENT_KEY);
    }

    @Override
    public GatewayFilter apply(Tuple args) {
        final String regex = args.getString(REGEXP_KEY);
        String replacement = args.getString(REPLACEMENT_KEY).replace("$\\", "$");
        return apply(regex, replacement);
    }

    public GatewayFilter apply(String regex, String replacement) {
        return (exchange, chain) -> {
            ServerHttpRequest req = exchange.getRequest();
            addOriginalRequestUrl(exchange, req.getURI());
            String path = req.getURI().getPath();
            String newPath = path.replaceAll(regex, replacement);

            ServerHttpRequest request = mutate(req)
                    .path(newPath)
                    .build();

            exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, request.getURI());

            return chain.filter(exchange.mutate().request(request).build());
        };
    }
}

주로 이 String newPath = path. replaceAll (regex, replacement) 입 니 다. 여 기 는 regex 가 / demo / (?. *) 이 고 replacement 은 / ${segment} 입 니 다.
작은 매듭
spring cloud gateway 는 RewritePath 를 이용 하여 원래 의 zuul 의 strip Prefix 효 과 를 실현 할 수 있 고 기능 이 더욱 강하 다.
doc
  • rewritepath_gatewayfilter_factory
  • 좋은 웹페이지 즐겨찾기