uri: 프록시 서비스 주소입니다. id와 uri는 필수이고, 조건자와 필터는 선택사항입니다.
조건자: 게이트웨이에 액세스하기 위한 URI를 일치시키는 데 사용할 수 있습니다. 일치하는 경우 현재 경로가 적용됩니다.
필터: 최고의 유연성으로 프록시 전후에 논리를 추가하는 GatewayFilter 인스턴스
처리 흐름
먼저 Handler Mapping은 URL을 처리한 후 이를 Web Handler에 전달하여 처리를 위한 필터의 전반부를 호출하고, 처리가 완료된 후 실제 프록시 서비스를 호출하여 로직을 실행합니다. 필터의 후반부 결과를 WebHandler에 반환한 다음 HandlerMapping에 반환하고 마지막으로 클라이언트에 반환합니다.
목록의 요소에 여러 필드가 있는 경우 각 필드와 값을 각각 지정하려면 "-"와 콜론이 필요합니다. 필드가 하나만 있는 경우 쉼표를 사용하여 구분할 수 있습니다.
객체 유형 구성, 각 필드는 "-" 및 콜론을 통해 구성 가능
맵 유형: 키, 값을 콜론으로 구분
predicates:
- Path=/sendOrder
- Query=name,ma.
- name: Query
args:
param: id
regexp: d+
#predicates是List, 它的元素是
public class PredicateDefinition {
@NotNull
private String name;
private Map<String, String> args = new LinkedHashMap<>();}
等号分割转成对象的写法不是yml内置支持的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
술부
조건자 구성은 목록이며, 그 요소는 특정 형식의 문자열 또는 개체일 수 있습니다. 문자열 작성 방법: 등호로 나누어 첫 번째 부분은 술어 이름, 두 번째 부분 args는 쉼표로 구분하여 해당 값을 Map 값에 저장하고 Map 키를 자동 생성합니다. 객체 작성 방법: PredicateDefinition
args 자체에 쉼표와 콜론이 있으면 문자열 형식을 사용할 수 없습니다.
ShortcutType 메소드는 ConfigClass에 대한 args 매개변수의 구문 분석 방법을 정의합니다. defaultFieldOrder는shortcutFieldPrefix 접두어를 제거하고 ConfigClass 필드 이름에 해당합니다. args 매개변수의 값은 ConfigClass: GATHER_LIST_TAIL_FLAG의 필드 값에 해당합니다. : 쉼표로 구분된 목록이지만 마지막 값은 Boolean 값이며 결국 2개의 키로 구성된 Map으로 변환됩니다. 첫 번째 키의 값은 Boolean 값 앞의 List이고 두 번째 키는 부울 값.
게이트웨이에 액세스하기 위한 요청(예: URI, 쿼리 매개변수, 요청 헤더)을 일치시키는 데 사용됩니다. 일치하는 경우 현재 경로가 적용됩니다.
GatewayPredicate 구현에 따라 구현 클래스는 RoutePredicateFactory의 구현 클래스입니다. 구현 클래스 이름 지정 사양은 다음과 같습니다. 예를 들어 Path는 PathRoutePredicateFactory에 해당합니다.
조건자 이름은 팩토리 구현 클래스의 클래스 이름 접두사에 해당하고 조건자 매개 변수 args는 팩토리 ConfigClass에 해당합니다.
여러 술어는그리고관계
조건자가 통과하지 못하면 게이트웨이는 404를 반환합니다.
길
경로 일치, 개미 일치 지원, {}를 통해 uriVariables 추출
질문
해당 http 요청 매개변수 이름이 있습니까? 값은 일반일 수 있습니다.
이름은 고정되어 있습니다. 쿼리, args에는 쿼리 매개변수 이름과 값에 해당하는 param과 regexp라는 2개의 값이 있습니다.
이름만 구성하면 요청 매개변수가 존재하는 한 전달된다는 의미입니다.
머리글
헤더 경로 PredicateFactory
요청 헤더의 이름과 값을 일치시킵니다. 실제 요청 헤더 값은 여러 개가 될 수 있습니다. 구성 값은 정규식을 지원합니다.
방법
HTTP 요청 방법과 일치하며 구성은 대문자여야 하며 쉼표로 구분되어야 합니다.
원격 주소
요청과 일치하는 클라이언트 IP, 정확하게 말하면 마지막 네트워크 프록시의 IP는 쉼표로 구분되어 여러 개가 될 수 있습니다.
주인
Host 요청 헤더(포트 제외)의 호스트 부분 값과 일치합니다. 여러 개일 수 있고 쉼표로 구분되며 ant로 일치될 수 있습니다.
AntPathMatcher를 사용하여 일치시키고 경로 구분 기호는 "."입니다.
쿠키
쿠키의 이름과 값을 일치시키십시오. 값은 정기적으로 일치될 수 있습니다.
무게
서로 다른 경로의 로드 밸런싱에 사용됩니다. 동일한 그룹의 경로는 가중치에 따라 로드됩니다.
그룹화 및 가중치라는 2개의 값을 쉼표로 구분하여 구성할 수 있습니다.
WeightCalculatorWebFilter: 시작되면 Weight 구성을 기반으로 2계층 Map이 생성됩니다. 첫 번째 계층은 그룹 이름이고, 두 번째 계층은 라우팅 ID입니다. 요청이 오면 0~1의 임의의 숫자가 생성됩니다. 각 그룹마다 라우팅 ID가 선택됩니다.
WeightRoutePredicateFactory: 조건자 필터링 시 그룹 및 경로 ID를 기준으로 필터링합니다.
필터
구성 작성 방법은 문자열 작성 방법과 동일합니다. 등호로 분할합니다. 첫 번째 부분은 필터 팩토리 GatewayFilterFactory 클래스 이름의 접두어에 해당하고 두 번째 부분은 매개변수입니다.
필터는 요청과 응답을 수정하는 데 사용됩니다.
요청 헤더 추가
백엔드에서 얻을 수 있는 요청 헤더를 추가합니다.
요청 헤더의 값은 uriVariables로부터의 동적 획득을 지원합니다.
스트립프리픽스
정수값 n은 하나만 있습니다. 요청한 경로를 "/"로 나눈 후 접두사 n을 제거합니다.
제한
교차 도메인
spring.cloud.gateway.globalcors:
cors-configurations:
'[/**]':#跨域的uriPattern
allowedHeaders: "*"
allowedOrigins: "*"
allowedMethods:
- POST
- OPTIONS
- GET
1
2
3
4
5
6
7
8
9
서버는 요청 헤더 Origin과 요청 URL의 스키마, 호스트, 포트가 동일한지 여부에 따라 크로스 도메인 요청인지 여부를 결정합니다. 한 가지 차이점만 있으면 크로스 도메인 요청입니다.
교차 도메인 구성이 있어야 하며 요청된 uri는 교차 도메인 구성의 uriPattern과 일치해야 합니다. 게이트웨이는 교차 도메인인지 여부를 확인하고 교차 도메인 요청 헤더를 허용합니다. 교차 도메인 구성의 소스, 요청 방법 및 실제 요청 요청 헤더, 소스 및 요청 방법이 일치하는지 여부, 모두 일치하면 교차 도메인 액세스를 실행하고, 그렇지 않으면 403Forbiden을 반환합니다.
서비스 검색을 통해 서비스 ID 획득을 지원하고, 서비스 ID를 기반으로 라우팅 구성을 자동으로 생성합니다.기본 라우팅 구성의 URI는 lb://serviceId이고 조건자는 /serviceId/**이며 필터는 serviceId를 제거하기 위한 Rewritepath입니다.
전역 필터
반응형 로드 밸런서 클라이언트 필터
lb 방식으로 라우팅 URI를 처리하려면 먼저 ServiceInstanceListSupplier를 통해 서비스 이름에 따라 서비스 인스턴스를 얻은 다음 ReactorLoadBalancer 인스턴스를 통해 로드 밸런싱을 수행합니다.
RouteToRequestUrl필터
2가지 작업을 수행합니다. 1. 2계층 구성표를 지원하고 외부 구성표를 GATEWAY_SCHEME_PREFIX_ATTR에 저장한 다음 제거합니다. 2. 내부 구성, 호스트 및 포트를 사용하여 실제 요청된 URI를 대체하여 전달을 수행합니다.