Fabryka wbudowanych filtrów
Oto prosta tabela wszystkich fabryk filtrów wbudowanych w Spring Cloud Gateway, która nie jest zbyt szczegółowa, ale może służyć jako szybki przegląd. Następujący sposób:
Fabryka filtrów | funkcja | parametr | AddRequestHeader | Dodaj nagłówek do oryginalnego żądania | Nazwa i wartość nagłówka | AddRequestParameter | Dodaj parametry żądania do oryginalnego żądania | Nazwa i wartość parametru | AddResponseHeader | Dodaj nagłówek do oryginalnej odpowiedzi | Nazwa i wartość nagłówka | DedupeResponseHeader | Odrzuca zduplikowane wartości w nagłówku odpowiedzi | Nazwa nagłówka i strategia deduplikacji, które trzeba zdeduplikować | Hystrix | Wprowadź ochronę przed wyłącznikiem obwodowym Hystrix na trasę | Nazwa HystrixCommand | Nagłówki rezerwowe | Dodaj konkretne informacje o wyjątkach do nagłówka żądania DropbackUri | Nazwa nagłówka | PrefiksPath | Dodaj prefiks do oryginalnej ścieżki żądania | Ścieżka prefiksowa | PreserveHostHeader | Dodaj do żądania właściwość preserveHostHeader=true, którą filtr routingu sprawdza, aby zdecydować, czy chcesz wysłać oryginalnego Hosta | nie | RequestRateLimiter | Algorytm ograniczania zamówień służy do ograniczania żądań jako kubełek tokenów | keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus | RedirectTo | Przekieruj oryginalne żądanie na wskazany adres URL | Kod statusu HTTP i adres URL przekierowania | Usuń filtr nagłówków HopBy Hop | Usuń serię nagłówków zalecanych przez organizację IETF dla oryginalnego żądania | Jest to domyślnie włączone i możesz określić, które nagłówki mają usuwać przez konfigurację | RemoveRequestHeader | Usuń nagłówek oryginalnego żądania | Nazwa nagłówka | RemoveResponseHeader | Usuń nagłówek oryginalnej odpowiedzi | Nazwa nagłówka | RewritePath | Przepisz oryginalną ścieżkę żądania | Oryginalny regex ścieżki i regex przekształconej ścieżki | RewriteResponseHeader | Przepisz nagłówek w oryginalnej odpowiedzi | Nazwa nagłówka, regularne wyrażenie wartości, przekształcona wartość | SaveSession | Wymusz operację WebSession::save przed przekazaniem żądania | nie | secureHeaders | Dodaj serię nagłówków odpowiedzi, które działają jako zabezpieczenie do oryginalnej odpowiedzi | Żadnych, możesz modyfikować wartości tych nagłówków bezpieczeństwa | SetPath | Zmodyfikuj oryginalną ścieżkę żądania | Zmodyfikowana ścieżka | SetResponseHeader | Zmodyfikuj wartość nagłówka w oryginalnej odpowiedzi | Nazwa nagłówka, zmodyfikowana wartość | SetStatus | Zmodyfikuj kod statusu oryginalnej odpowiedzi | Kody statusu HTTP, które mogą być liczbami lub ciągami znaków | StripPrefiks | Użyte do skracania ścieżki oryginalnego żądania | Użyj liczb, aby wskazać liczbę ścieżek do obcięcia | Ponów próbę | Spróbuj ponownie, aby uzyskać inne odpowiedzi | retries、statuses、methods、series | RequestSize | Ustaw rozmiar maksymalnej liczby żądanych pakietów, które mogą być odbierane. Jeśli rozmiar pakietu żądania przekroczy ustaloną wartość, zwracane jest 413 Payload Too Large | Rozmiar pakietu żądań jest wyrażony w bajtach, a domyślna wartość to 5M | ModifyRequestBody | Zmodyfikuj oryginalną treść treści żądania przed przekazaniem żądania | Zmodyfikowana treść zapytania | ModifyResponseBody | Modyfikacja zawartości oryginalnej części odpowiedzi | Zmodyfikowana zawartość ciała odpowiedzi | Domyślny | Dodaj filtry dla wszystkich tras | Nazwa i wartość fabryki filtrów |
Wskazówki: Każda fabryka filtrów odpowiada klasie implementacyjnej, a teNazwa klasy musi kończyć się na GatewayFilterFactoryJest to konwencja Spring Cloud Gateway, na przykład klasa implementacyjna odpowiadająca AddRequestHeader to AddRequestHeaderGatewayFilterFactory. Znajomi zainteresowani kodem źródłowym mogą połączyć nazwy klas zgodnie z tą regułą, aby znaleźć kod implementacyjny tych wbudowanych fabryk filtrów.
1、AddRequestHeader GatewayFilter Factory
Dodaj nagłówek do oryginalnego żądania, przykład konfiguracji:
Dodaj nagłówek żądania o nazwie X-Request-Foo z wartością Bar do oryginalnego żądania
2、AddRequestParameter GatewayFilter Factory
Dodaj parametry i wartości żądań do oryginalnego żądania, przykład konfiguracji:
Dodaj parametr o nazwie foo z wartością bar do oryginalnego żądania, tzn.: foo=bar
3、AddResponseHeader GatewayFilter Factory
Dodaj nagłówek do oryginalnej odpowiedzi, przykład konfiguracji:
Dodaj nagłówek odpowiedzi o nazwie X-Request-Foo z wartością Bar do oryginalnej odpowiedzi
4、DedupeResponseHeader GatewayFilter Factory
DedupeResponseHeader może usuwać zduplikowane wartości w nagłówkach odpowiedzi na podstawie skonfigurowanej nazwy nagłówka i polityki deduplikacji, co jest nową funkcją oferowaną przez Spring Cloud Greenwich SR2 i nie może być używana w tej wersji.
MyJeśli nagłówek CORS (Solving Cross-Domain) jest ustawiony zarówno na bramce, jak i mikroserwisie, jeśli nie dokonano żadnej konfiguracji, to wartość nagłówka CORS uzyskana jest przez żądanie -> bramki -> mikroserwisu, będzie wyglądać tak:
Widać, że wartości tych dwóch nagłówków są zduplikowane, jeśli chcesz zdeduplikować wartości tych dwóch nagłówków, musisz użyć DedupeResponseHeader, przykład konfiguracji:
Strategia deduplikacji:
- RETAIN_FIRST: Domyślnie, zachowaj pierwszą wartość
- RETAIN_LAST: Zachowaj ostatnią wartość
- RETAIN_UNIQUE: Zachowaj wszystkie unikalne wartości w kolejności, w jaką pojawiły się po raz pierwszy
Jeśli chcesz lepiej zrozumieć fabrykę filtrów, zaleca się przeczytanie kodu źródłowego fabryki filtrów, ponieważ kod źródłowy zawiera szczegółowe notatki i przykłady, co jest lepsze niż oficjalna dokumentacja: org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory
5、Fabryka filtrów bram Hystrix
Przedstawiamy ochronę wyłączników obwodowych Hystrix dla tras, przykład konfiguracji:
Hystrix to pierwsza generacja odpornych na awarie komponentów Spring Cloud, ale weszła w tryb konserwacji, a Hystrix zostanie usunięta przez Spring Cloud w przyszłości, zastąpiona przez Alibaba Sentinel/Resilience4J. Ten artykuł nie będzie wchodził w szczegóły, jeśli jesteś zainteresowany, możesz sięgnąć do oficjalnej dokumentacji: Hystrix GatewayFilter Factory
6、FallbackHeaders GatewayFilter Factory
Wspierając również Hystrix, fabryka filtrów opisana w poprzedniej sekcji obsługuje parametr konfiguracyjny: fallbackUri, który służy do przekazywania żądań do określonego URI w przypadku wystąpienia wyjątku. Fabryka filtrów FallbackHeaders może dodać nagłówek podczas przekazywania żądania do URI, a wartość tego nagłówka to konkretna informacja o wyjątku. Przykład konfiguracji:
Nie będę tu wchodził w szczegóły, jeśli jesteś zainteresowany, możesz zajrzeć do oficjalnej dokumentacji: FallbackHeaders GatewayFilter Factory
7、PrefiksPath GatewayFilter Factory
Dodaj ścieżkę prefiksu do oryginalnej ścieżki żądania, przykład konfiguracji:
Ta konfiguracja sprawia, że wizyta do ${GATEWAY_URL}/hello jest przekazywana dohttps://example.org/mypath/hello
8、PreserveHostHeader GatewayFilterFactory
Dodaj do żądania właściwość preserveHostHeader=true, którą filtr routingu sprawdza, aby zdecydować, czy wysłać oryginalny nagłówek Hosta. Przykład konfiguracji:
Jeśli nie jest ustawione, to nagłówek o nazwie Host będzie kontrolowany przez klienta Http
9、RequestRateLimiter GatewayFilter Factory
Służy do ograniczania żądań, a algorytm ograniczania to "bucket" (wiadrok tokenów). Przykład konfiguracji:
10、RedirectTo GatewayFilter Factory
Przekieruj oryginalne żądanie na określony adres URL, przykład konfiguracji:
Ta konfiguracja przekierowuje dostęp do ${GATEWAY_URL}/hello na https://acme.org/hello , i przenieść jedenLocation:http://acme.orgNagłówek, podczas gdy kod statusu HTTP zwracający klienta to 302
Notatki:
Kod statusu HTTP powinien brzmieć 3xx, np. 301
URL musi być legalnym URL, który służy jako wartość nagłówka lokalizacji
11、RemoveHopByHopHeadersFilter GatewayFilter Factory
Dla oryginalnego żądania usunięcia serii nagłówków określonych przez organizację IETF, domyślne usunięte nagłówki są następujące:
- Połączenie
- Keep-Alive
- Uwierzytelnianie pośrednie
- Autoryzacja pełnomocnictwa
- TE
- Przyczepa
- Kodowanie transferowe
- Upgrade
Możesz określić, które nagłówki są usuwane tylko przez konfigurację, przykład konfiguracji:
12、RemoveRequestHeader GatewayFilter Factory
Aby usunąć nagłówek oryginalnego żądania, skonfiguruj przykład:
Usuń nagłówek żądania o nazwie X-Request-Foo z oryginalnego żądania
13、RemoveResponseHeader GatewayFilter Factory
Aby usunąć nagłówek oryginalnej odpowiedzi, skonfiguruj przykład:
Usuń nagłówek odpowiedzi o nazwie X-Request-Foo z oryginalnej odpowiedzi
14、RewritePath GatewayFilter Factory
Nadpisywanie oryginalnej ścieżki żądania wyrażeniem regularnym, przykład konfiguracji:
Ta konfiguracja pozwala na dostęp do /foo/bar na przepisanie ścieżki do /bar i jej przekazanie, czyli przekazywanie do https://example.org/bar。 Należy zauważyć, że ze względu na składnię YAML zamiast $ należy używać $\
15、RewriteResponseHeader GatewayFilter Factory
Przekształc nagłówek w oryginalnej odpowiedzi, przykład konfiguracji:
Znaczenie tej konfiguracji polega na tym, że jeśli wartość X-Response-Foo w nagłówku odpowiedzi to /42?user=ford&password=omg!what&flag=true, zostanie przepisana na /42?user=ford&password=***&flag=true zgodnie z ustawioną wartością, czyli hasłem=omg!co zostanie przepisane na password=***
16、SaveSession GatewayFilter Factory
Przed przekazaniem żądania wymusz operację WebSession::save, przykład konfiguracji:
Jest głównie używany do przechowywania danych z opóźnieniem (dane nie są od razu utrwalane), podobnie jak Spring Session, i ma zapewnić, że stan sesji zostanie zapisany przed przekazaniem żądania. Jeśli integrujesz Spring Secutiry z Spring Session i chcesz mieć pewność, że wszystkie informacje o bezpieczeństwie będą przesyłane do kolejnych maszyn, musisz skonfigurować ten filtr.
17、secureHeaders GatewayFilter Factory
Fabryka filtrów secureHeaders opiera się głównie na zaleceniach z tego bloga, dodając serię nagłówków odpowiedzi, które odgrywają rolę bezpieczeństwa w oryginalnej odpowiedzi. Domyślnie dodane są następujące nagłówki (w tym wartości):
- 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
Jeśli chcesz zmodyfikować wartości tych nagłówków, musisz użyć odpowiadających im sufiksów, w następujący sposób:
- XSS-protection-header
- ścisłe bezpieczeństwo transportu
- Opcje ramek
- Opcje typu treści
- Polityka referrer-policy
- Polityka bezpieczeństwa-treści
- opcje pobrania
- Polityki dozwolone między dziedzinami
Przykład konfiguracji:
Jeśli chcesz wyłączyć niektóre nagłówki, możesz użyć następującej konfiguracji:
18、SetPath GatewayFilter Factory
Zmodyfikuj oryginalną ścieżkę żądania i skonfiguruj przykład:
Ta konfiguracja sprawia, że podczas dostępu jest przesyłany do ${GATEWAY_URL}/foo/barhttps://example.org/bar , czyli oryginalne /foo/bar zostało zmienione na /bar
19、SetResponseHeader GatewayFilter Factory
Zmodyfikuj wartość nagłówka w oryginalnej odpowiedzi, konfiguruj przykład:
Zmodyfikuj wartość X-Response-Foo w oryginalnej odpowiedzi na Bar
20、SetStatus GatewayFilter Factory
Zmodyfikuj kod statusu oryginalnej odpowiedzi, przykład konfiguracji:
Wartość SetStatusd może być zarówno liczbą, jak i ciągiem znaków. Ale musi to być wartość w klasie enumeracji Spring HttpStatus. Obie powyższe konfiguracje mogą zwracać kod statusu HTTP 401.
21、Fabryka Filtrów GatewayFilter z prefiksem
Dla skracania ścieżki oryginalnego żądania, przykład konfiguracji:
Jak pokazano w powyższej konfiguracji, jeśli żądana ścieżka to /name/bar/foo, zostanie ona obcięta do /foo i przekierowana, czyli 2 ścieżki zostaną obcięte.
22、Ponownie GatewayFilter Factory
Spróbuj ponownie dla różnych odpowiedzi, np. dla kodów statusowych HTTP, przykład konfiguracji:
Można skonfigurować następujące parametry:
- powtórki: Liczba prób
- statuses: Kod statusu, który trzeba powtórzyć, ustawiony w org.springframework.http.HttpHttpStatus
- methods: Metoda żądania, którą trzeba powtórzyć, z wartością org.springframework.http.HttpHttpMethod
- series:sekwencja kodu statusowego HTTP z wartością w org.springframework.http.HttpHttpStatus.Series
23、RequestSize GatewayFilter Factory
Ustaw rozmiar maksymalnej dozwolonej do odebrania pakietów żądań, przykład konfiguracji:
Jeśli rozmiar pakietu żądań przekroczy ustaloną wartość, zwracany jest ładunek 413 Payload Too Large wraz z komunikatem o błędzie
24、Modify Request Body GatewayFilter Factory
Zmodyfikuj oryginalną treść ciała żądania przed przekazaniem żądania, fabryczny filtr może być skonfigurowany tylko przez kod, a nie w pliku konfiguracyjnym. Przykład kodu:
Wskazówki: Ta fabryka filtrów jest w stanie BETA, a API może się zmienić w przyszłości.Prosimy o ostrożne korzystanie z środowiska produkcyjnego
25、Fabryka filtrów filtrów Gate Body Modify Response
Fabryka filtrów może być również używana do modyfikacji zawartości oryginalnego korpusu odpowiedzi, a fabryka filtrów może być konfigurowana wyłącznie przez kod, a nie w pliku konfiguracyjnym. Przykład kodu:
Wskazówki: Ta fabryka filtrów jest w stanie BETA, API może się zmienić w przyszłości, prosimy o ostrożne korzystanie z niego w środowisku produkcyjnym
26、Domyślne filtry
Domyślne filtry służą do dodania fabryki filtrów do wszystkich tras, czyli do przekazywaniaFabryka filtrów skonfigurowana przez Domyślny Filtr będzie miała zastosowanie do wszystkich tras。 Przykład konfiguracji:
(Koniec)
|