이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 9128|회답: 0

[출처] Spring Cloud Gateway에 내장된 필터 팩토리

[링크 복사]
게시됨 2022. 2. 7. 오후 1:36:49 | | |
내장 필터 공장

다음은 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 헤더의 값이 사용됩니다, 이런 식일 것입니다:


Access-Control-Allow-Credentials: true, true
Access-Control-Allow-Origin: https://musk.mars, https://musk.mars
이 두 헤더의 값이 중복된 것을 볼 수 있습니다. 이 두 헤더의 값을 중복 제거하려면 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, 기본 필터

기본 필터는 모든 경로에 필터 공장을 추가하는 데 사용되며, 즉 통과를 의미합니다기본 필터로 구성된 필터는 모든 경로에 적용됩니다。 구성 예시:


(끝)




이전의:Docker 로그가 디스크와 데이터 마이그레이션을 가득 채웁니다
다음:자바의 동적 스플라이싱 SQL 문은 데이터베이스 주입을 방지합니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com