springcloud gateway 설정 context-path 동작
4165 단어 springcloudgatewaycontext-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 로 바 뀌 었 고 문 제 는 해결 되 었 습 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring Cloud에서 Feign에 대한 일반적인 질문 요약1. FeignClient 인터페이스, @GettingMapping 같은 조합 메모는 사용할 수 없음 코드 예: 이쪽 @RequestMapping(value = "/simple/{id}", method = Reque...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.