springcloud gateway 설정 context-path 동작

오늘 질문 을 드 리 겠 습 니 다.springcloud gateway 설정 context-path 에 대한 질문 입 니 다.
1.필드 사용
2 급 도 메 인 이름 을 신청 하지 않 았 기 때문에 게 이 트 웨 이 가 사용 하 는 주 소 는 xxx.com/gateway/nginx 로 전송 할 때/gateway/도 주 소 를 찾 는 데 사 용 됩 니 다.
gateway 는 context-path 를 설정 할 수 없습니다.저 에 게 이 장면 에 대해 세 가지 해결 방안 이 있 습 니 다.
2.해결 방안
2.1 로 컬 경로 추가(한 사이트 가 자신 을 가리 키 고 있 습 니 다.여기 가 바로/gateway 입 니 다)

spring:
  cloud:
    gateway:
      routes:
      #       contextPath,        ,     contextPath
      - id: self
        uri: http://localhost:${server.port}
        predicates:
        - Path=/${spring.application.name}/**
        filters:
        - StripPrefix=1
        order: -11000
이런 방식 은 요청 을 잃 어 버 리 고 원인 을 고려 하지 않 고 패스 합 니 다.
2.2 필터 추가,경로 변경
ApiFilter.java

package com.yiche.ballast.filter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.WebFilter;
import reactor.core.publisher.Mono; 
 
@Configuration
public class ApiFilter {
    @Value("${spring.cloud.gateway.api-prefix:/gateway}")
    private String prefix; 
    @Bean
    @Order(-1)
    public WebFilter apiPrefixFilter() {
        return (exchange, chain) -> {
            ServerHttpRequest request = exchange.getRequest();
 
            String path = request.getURI().getRawPath();
            if (!path.contains(prefix)) {
                ServerHttpResponse response = exchange.getResponse();
                response.setStatusCode(HttpStatus.BAD_GATEWAY);
 
                DataBuffer buffer = response
                        .bufferFactory()
                        .wrap(HttpStatus.BAD_GATEWAY.getReasonPhrase().getBytes());
                return response.writeWith(Mono.just(buffer));
            }
            String newPath = path.replaceFirst(prefix, "");
            ServerHttpRequest newRequest = request.mutate().path(newPath).build();
 
            return chain.filter(exchange.mutate().request(newRequest).build());
        };
    }
}
이렇게/gateway 가 들 어 오 라 고 요청 하면 routers 에 전송 할 때/gateway 를 제거 합 니 다.모든 요청 이 들 어 올 때마다 경 로 를 처리 해 야 하 는 것 이 단점 입 니 다.
코드 를 최대한 쓰 지 않도록 설정 할 수 있 습 니 다.
2.3 설정 을 수정 하고 모든 router 경로 앞 에 접 두 사 를 붙 입 니 다.

spring:
    cloud:
        gateway:
            routes:
            - id: api-route
              filters:
                - StripPrefix=1
              predicates:
                - name: Path
                  args[pattern]: /gateway/api/**
              uri: lb://xxx-api
게 으 름 피 우 는 방법 은 길이 많 을 때 도 매우 괴롭다.
지금 은 경로 가 많 지 않 아 세 번 째 방식 을 선택 했다.각자 의 장면 을 보고 선택 하 세 요.
springcloud 의 gateway 가 구 덩이 를 밟 습 니 다.
경로 규칙 설정 을 추가 한 후 SpringCloud 가 정상적으로 시작 되 지 않 아 시작 할 때 오류 가 발생 했 습 니 다.
1.설정 파일 에서 debug=true 모드 열기
오류 정보 표시 에 javax.validation.ValidatorException 클래스 가 없습니다.
2.pom 파일 에 hibenate-vaidator(및 모든 의존 도 를 추가 합 니 다)

3.결 과 는 여전히 잘못 보고 되 었 습 니 다.이때 잘못된 정보:


비어 있 으 면 안 됩 니 다.이전 에는 yml 파일 에 설정 되 었 다가 properties 로 바 뀌 었 고 문 제 는 해결 되 었 습 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기