내장 필터 공장
다음은 Spring Cloud Gateway에 내장된 모든 필터 팩토리의 간단한 표로, 자세하지는 않지만 간단한 개요로 사용할 수 있습니다. 다음과 같습니다:
필터 공장 | 기능 | 매개 변수 | AddRequestHeader | 원래 요청에 헤더를 추가하세요 | 헤더 이름과 값 | AddRequestParameter | 원래 요청에 요청 매개변수를 추가하세요 | 매개변수 이름과 값 | AddResponse헤더 | 원래 답변에 헤더를 추가하세요 | 헤더 이름과 값 | 중복응답헤더 | 응답 헤더에서 중복된 값을 거부합니다 | 중복 제거가 필요한 헤더 이름과 중복 제거 전략 | 하이스트릭스 | 노선에 Hystrix의 차단기 보호 기능을 도입하세요 | HystrixCommand라는 이름이 | 폴백헤더 | fallbackUri의 요청 헤더에 구체적인 예외 정보를 추가하세요 | 헤더 이름 | 프리픽스패스 | 원래 요청 경로에 접두사 추가하세요 | 접두사 경로 | PreserveHost헤더 | 요청에 preserveHostHeader=true 속성을 추가하면, 라우팅 필터가 원본 호스트를 보내는지 여부를 확인합니다 | 안 | RequestRateLimiter | 요청을 제한하는 데 사용되는 스로틀링 알고리즘은 토큰 버킷입니다 | keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus | 리다이렉트: | 원래 요청을 지정된 URL로 리디렉션합니다 | HTTP 상태 코드와 리디렉션 URL | RemoveHopByHopHeadersFilter | 원래 요청에 대해 IETF 조직에서 규정한 일련의 헤더를 제거하세요 | 기본적으로 활성화되어 있고, 설정을 통해 삭제할 헤더를 지정할 수 있습니다 | RemoveRequestHeader | 원래 요청의 헤더를 삭제하세요 | 헤더 이름 | RemoveResponseHeader | 원래 답변의 헤더를 제거하세요 | 헤더 이름 | 리라이트패스 | 원래 요청 경로를 다시 작성하세요 | 원래 경로 정규식과 재작성된 경로의 정규식입니다 | RewriteResponseHeader | 원래 답변의 헤더를 다시 작성하세요 | 헤더 이름, 값의 정규 표현식, 다시 작성된 값 | 세이브세션 | 요청을 전달하기 전에 WebSession::save 작업을 강제하세요 | 안 | secure헤더 | 원래 응답에 보안 역할을 하는 일련의 응답 헤더를 추가하세요 | 없으며, 이 보안 응답 헤더의 값을 수정할 수 있습니다 | 세트패스 | 원래 요청 경로를 수정하세요 | 수정된 경로 | SetResponseHeader | 원래 응답에서 헤더의 값을 수정하세요 | 헤더 이름, 수정된 값 | SetStatus | 원래 응답의 상태 코드를 수정하세요 | HTTP 상태 코드는 숫자나 문자열일 수 있습니다 | 스트립프리픽스 | 원래 요청의 경로를 절단하는 데 사용됩니다 | 잘라낼 경로의 수를 나타내는 데 숫자를 사용하세요 | 재시도 | 다른 답변을 위해 다시 시도해 보세요 | 리트리, 상태, 메서드, 시리즈 | 요청크기 | 수신할 수 있는 최대 요청 패킷 크기를 설정합니다. 요청 패키지 크기가 설정된 값을 초과하면 413 페이로드 너무 큰 값이 반환됩니다 | 요청 패키지 크기는 바이트 단위이며 기본 값은 5M입니다 | ModifyRequestBody | 요청을 전달하기 전에 원본 요청 본문 내용을 수정하세요 | 수정된 요청 본문 내용 | ModifyResponseBody | 원래 응답 본문의 내용을 수정하세요 | 수정된 반응 본체 내용 | 기본값 | 모든 경로에 필터를 추가하세요 | 필터 공장 이름 및 값 |
팁: 각 필터 공장은 구현 클래스에 해당하며,클래스 이름은 반드시 GatewayFilterFactory로 끝나야 합니다이는 Spring Cloud Gateway의 관례로, 예를 들어 AddRequestHeader에 대응하는 구현 클래스는 AddRequestHeaderGatewayFilterFactory입니다. 소스 코드에 관심 있는 친구들은 이 규칙에 따라 특정 클래스 이름을 스이어치하여 내장 필터 팩토리의 구현 코드를 찾을 수 있습니다.
1、AddRequestHeader GatewayFilter Factory
원래 요청에 헤더를 추가하세요, 구성 예시:
원래 요청에 Bar 값을 가진 X-Request-Foo라는 요청 헤더를 추가하세요
2、AddRequestParameter GatewayFilter Factory
원래 요청에 요청 매개변수와 값을 추가하세요, 구성 예시:
원래 요청에 bar가 값인 foo라는 매개변수를 추가하세요. 예를 들어, foo=bar입니다
3, AddResponseHeader GatewayFilter Factory
원래 답변에 헤더를 추가하세요, 구성 예시:
원래 응답에 Bar 값을 가진 X-Request-Foo라는 응답 헤더를 추가하세요
4、DedupeResponseHeader GatewayFilter Factory
DedupeResponseHeader는 설정된 헤더 이름과 중복 제거 정책에 따라 응답 헤더 내 중복 값을 제거할 수 있으며, 이는 Spring Cloud Greenwich SR2에서 제공하는 새로운 기능이며 이 버전에서는 사용할 수 없습니다.
우리게이트웨이와 마이크로서비스 모두에서 CORS(Solving Cross-Domain Header)가 설정되어 있고, 설정이 이루어지지 않은 경우, -> 게이트웨이 -> 마이크로서비스를 요청하여 얻은 CORS 헤더의 값이 사용됩니다, 이런 식일 것입니다:
이 두 헤더의 값이 중복된 것을 볼 수 있습니다. 이 두 헤더의 값을 중복 제거하려면 DedupeResponseHeader를 사용해야 합니다. 구성 예시:
중복 제거 전략:
- RETAIN_FIRST: 기본값, 첫 번째 값은 유지하세요
- RETAIN_LAST: 마지막 금액은 유지하세요
- RETAIN_UNIQUE: 모든 고유 값은 처음 등장한 순서대로 유지하세요
필터 팩토리에 대해 더 포괄적으로 이해하고 싶다면, 필터 팩토리의 소스 코드를 읽는 것이 권장됩니다. 소스 코드에는 자세한 노트와 예제가 포함되어 있어서 공식 문서보다 더 좋습니다: org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory
5, Hystrix 게이트웨이 필터 팩토리
Hystrix의 회로 차단기 보호 기능을 소개합니다. 구성 예시:
Hystrix는 Spring Cloud의 1세대 내결함성 부품이지만, 현재 유지보수 단계에 들어갔으며, 앞으로 Spring Cloud에서 Hystrix가 제거되고 Alibaba Sentinel/Resilience4J로 대체될 예정입니다. 따라서 이 글에서는 자세히 다루지 않겠습니다. 관심 있으시다면 공식 문서인 Hystrix GatewayFilter Factory를 참고하시면 됩니다
6、FallbackHeaders GatewayFilter Factory
Hystrix를 지원하는 필터 팩토리는 앞서 설명한 필터 팩토리에서 fallbackUri라는 구성 매개변수를 지원하며, 예외가 발생할 경우 특정 URI로 요청을 전달하는 데 사용됩니다. FallbackHeaders 필터 공장은 요청을 URI로 전달할 때 헤더를 추가할 수 있으며, 이 헤더의 값이 특정 예외 정보입니다. 구성 예시:
여기서 자세히 다루지는 않겠습니다. 관심 있으시면 공식 문서를 참고하시면 됩니다: FallbackHeaders GatewayFilter Factory
7, PrefixPath GatewayFilter Factory
원래 요청 경로에 접두사 경로를 추가하며, 구성 예시:
이 구성은 ${GATEWAY_URL}/hello 방문을 앞으로 전달합니다.https://example.org/mypath/hello
8, PreserveHostHeader GatewayFilter Factory
요청에 preserveHostHeader=true 속성을 추가하면 라우팅 필터가 원본 Host 헤더를 전송할지 여부를 결정합니다. 구성 예시:
설정하지 않으면 Host라는 헤더가 Http 클라이언트에 의해 제어됩니다
9、RequestRateLimiter GatewayFilter Factory
이 알고리즘은 요청을 제한하는 데 사용되며, 제한 알고리즘은 토큰 버킷입니다. 구성 예시:
10, RedirectTo GatewayFilter Factory
원래 요청을 지정된 URL로 리디렉션하며, 구성 예시:
이 구성은 ${GATEWAY_URL}/hello에 대한 접근을 다음으로 리디렉션합니다 https://acme.org/hello , 그리고 하나를 가지고Location:http://acme.org헤더는 302이며, 클라이언트를 반환하는 HTTP 상태 코드는 302입니다
노트:
HTTP 상태 코드는 3xx, 예를 들어 301이어야 합니다
URL은 위치 헤더의 값으로 사용되는 합법적인 URL이어야 합니다
11、RemoveHopByHopHeadersFilter GatewayFilter Factory
IETF 조직에서 지정한 일련의 헤더를 제거하기 위한 원래 요청의 경우, 기본 삭제된 헤더는 다음과 같습니다:
- 연결
- 킵-얼라이브
- 프록시 인증
- 프록시 권한
- TE
- 트레일러
- 전송 인코딩
- 업그레이드
어떤 헤더가 삭제되어야 하는지 설정과 구성 예시를 통해 지정할 수 있습니다:
12、RemoveRequestHeader GatewayFilter Factory
원래 요청의 헤더를 제거하려면 예를 구성하세요:
원래 요청에서 X-Request-Foo라는 요청 헤더를 제거하세요
13, RemoveResponseHeader GatewayFilter Factory
원래 응답의 헤더를 제거하려면 예를 구성하세요:
원래 응답에서 X-Request-Foo라는 응답 헤더를 제거하세요
14, RewritePath GatewayFilter Factory
정규 표현식으로 원래 요청 경로를 덮어쓰는 구성, 예시:
이 구성은 /foo/bar에 접근하여 /bar로 경로를 다시 쓰고 전달할 수 있게 해줍니다. 즉, 다음 https://example.org/bar。 YAML 문법상 $\ 대신 $\를 사용해야 한다는 점에 유의하세요
15, RewriteResponseHeader GatewayFilter Factory
원래 답변에서 헤더를 다시 작성하세요, 구성 예시:
이 구성의 중요성은 응답 헤더의 X-Response-Foo 값이 /42?user=ford&password=omg!what&flag=true라면, 설정된 값에 따라 /42?user=ford&password=***&flag=true로 다시 쓰인다는 점입니다. 즉, password=omg!what이 password=***
16、SaveSession GatewayFilter Factory
요청을 전달하기 전에 WebSession::save 작업을 강제하세요. 구성 예시:
주로 Spring Session과 같은 지연된 데이터 저장(데이터가 즉시 보존되지 않음)에 사용되며, 요청이 전달되기 전에 세션 상태가 저장되도록 합니다. Spring Secutiry를 Spring Session에 통합하고 모든 보안 정보가 하위 머신으로 전송되도록 하려면 이 필터를 설정해야 합니다.
17, secureHeaders GatewayFilter Factory
secureHeaders 필터 공장은 주로 이 블로그의 권고사항을 기반으로 하며, 원래 응답에서 보안 역할을 하는 일련의 응답 헤더를 추가합니다. 기본적으로 다음 헤더(값 포함)가 추가됩니다:
- X-Xss-Protection:1; mode=block
- Strict-Transport-Security:max-age=631138519
- X-Frame-Options:DENY
- X-Content-Type-Options:nosniff
- Referrer-Policy:no-referrer
- Content-Security-Policy:default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'
- X-Download-Options:noopen
- X-Permitted-Cross-Domain-Policies:none
이 헤더들의 값을 수정하고 싶다면, 다음과 같이 해당 헤더의 접미사를 사용해야 합니다:
- xss-protection-헤더
- 엄격-운송-보안
- 프레임 옵션
- 콘텐츠-타입-옵션
- 참조자 정책
- 콘텐츠-보안-정책
- 다운로드 옵션
- 허용된 도메인 교차 정책
구성 예시:
특정 헤더를 비활성화하고 싶을 경우, 다음 구성을 사용할 수 있습니다:
18, SetPath GatewayFilter Factory
원래 요청 경로를 수정하고 예시를 구성하세요:
이 구성은 접근시 ${GATEWAY_URL}/foo/bar로 전달됩니다https://example.org/bar 즉, 원래의 /foo/bar가 /bar로 변경되었습니다
19、SetResponseHeader GatewayFilter Factory
원래 응답에서 헤더의 값을 수정하고, 예를 구성하세요:
Bar에 대한 원래 응답에서 X-Response-Foo의 값을 수정하세요
20、SetStatus GatewayFilter Factory
원래 응답의 상태 코드를 수정하세요, 구성 예시:
SetStatusd의 값은 숫자일 수도 있고 문자열일 수도 있습니다. 하지만 Spring HttpStatus 열거 클래스의 값이어야 합니다. 위 두 구성 모두 HTTP 상태 코드 401을 반환할 수 있습니다.
21, StripPrefix GatewayFilter Factory
원래 요청의 경로를 절단하기 위한 구성 예시:
위 구성에서 보듯이, 요청된 경로가 /name/bar/foo라면 /foo로 잘려 전달되며, 즉 두 개의 경로가 잘립니다.
22, Retry GatewayFilter Factory
다른 응답을 위해 다시 시도하세요. 예를 들어 HTTP 상태 코드, 구성 예시:
다음 매개변수들을 구성할 수 있습니다:
- 재시도: 재시도 횟수
- statuses: org.springframework.http.HttpStatus에서 재설정해야 하는 상태 코드입니다.
- methods: 다시 시도해야 하는 요청 메서드로, org.springframework.http.HttpMethod 값이 있습니다
- series:HTTP 상태 코드 시퀀스, org.springframework.http.Http.Status.Series 값이 포함되어 있습니다
23、RequestSize GatewayFilter Factory
수신할 수 있는 최대 요청 패킷 크기를 설정하세요. 구성 예시:
요청 패키지 크기가 설정된 값을 초과하면 413 페이로드 너무 큰 값과 함께 errorMessage가 반환됩니다
24, Modify Request Body GatewayFilter Factory
요청을 전달하기 전에 원래 요청 본문 내용을 수정하세요. 필터 팩토리는 구성 파일에서는 코드로만 구성할 수 있습니다. 코드 예시:
팁: 이 필터 공장은 베타 단계이며, API는 앞으로 변경될 수 있습니다.생산 환경을 조심해서 사용해 주세요
25, 응답 바디 게이트웨이 필터 공장 수정
필터 팩토리는 원래 응답 본문의 내용을 수정하는 데도 사용할 수 있으며, 필터 팩토리는 구성 파일에서는 코드로만 구성할 수 있습니다. 코드 예시:
팁: 이 필터 공장은 베타 단계이며, API가 앞으로 변경될 수 있으니 운영 환경에서 신중히 사용해 주시기 바랍니다
26, 기본 필터
기본 필터는 모든 경로에 필터 공장을 추가하는 데 사용되며, 즉 통과를 의미합니다기본 필터로 구성된 필터는 모든 경로에 적용됩니다。 구성 예시:
(끝)
|