Eingebaute Filterfabrik
Hier ist eine einfache Tabelle aller Filterfabriken, die in Spring Cloud Gateway eingebaut sind, die nicht sehr detailliert ist, aber als schneller Überblick dienen kann. Folgendermaßen:
Filterfabrik | Funktion | Parameter | AddRequestHeader | Füge der ursprünglichen Anfrage einen Header hinzu | Header-Name und Wert | AddRequestParameter | Fügen Sie Anfrageparameter zur ursprünglichen Anfrage hinzu | Parametername und Wert | AddResponseHeader | Füge der ursprünglichen Antwort einen Header hinzu | Header-Name und Wert | DedupeResponseHeader | Lehnt doppelte Werte im Antwortheader ab | Der Headername und die Deduplizierungsstrategie, die dedupliziert werden müssen | Hystrix | Führen Sie den Sicherungsschutz von Hystrix für die Strecke ein | Der Name HystrixCommand | FallbackHeader | Fügen Sie spezifische Ausnahmeinformationen in den Anfrage-Header der FallbackUri hinzu | Name des Headers | PräfixPfad | Fügen Sie dem ursprünglichen Anfragepfad ein Präfix hinzu | Präfixpfad | PreserveHostHeader | Füge der Anfrage eine Eigenschaft preserveHostHeader=true hinzu, die der Routing-Filter prüft, um zu entscheiden, ob du den ursprünglichen Host senden möchtest | nicht | RequestRateLimiter | Der Drosselalgorithmus wird verwendet, um Anfragen zu drosseln, und ist ein Token-Bucket | keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus | Weiterleitung | Leite die ursprüngliche Anfrage auf die angegebene URL um | HTTP-Statuscode und Weiterleitungs-URL | RemoveHopByHopHeadersFilter | Entfernen Sie eine Reihe von Headern, die von der IETF-Organisation für die ursprüngliche Anfrage vorgeschrieben wurden. | Das ist standardmäßig aktiviert, und man kann angeben, welche Header nur über die Konfiguration gelöscht werden | RemoveRequestHeader | Lösche einen Header für die ursprüngliche Anfrage | Header-Name | RemoveResponseHeader | Entferne einen Header für die ursprüngliche Antwort | Header-Name | RewritePath | Schreibe den ursprünglichen Anforderungspfad neu | Das ursprüngliche Pfad-Regex und das Regex des umgeschriebenen Pfades | RewriteResponseHeader | Schreibe einen Header in der ursprünglichen Antwort um | Header-Name, reguläre Wertausdruck, umgeschriebener Wert | SaveSession | Setzen Sie die WebSession::save-Operation durch, bevor Sie die Anfrage weiterleiten | nicht | secureHeaders | Fügen Sie eine Reihe von Antwortheadern hinzu, die als Sicherheit zur ursprünglichen Antwort dienen | Keine, du kannst die Werte dieser Sicherheits-Response-Header modifizieren | SetPath | Ändern Sie den ursprünglichen Anfragepfad | Modifizierter Weg | SetResponseHeader | Ändere den Wert eines Headers in der ursprünglichen Antwort | Header-Name, der modifizierte Wert | SetStatus | Ändern Sie den Statuscode der ursprünglichen Antwort | HTTP-Statuscodes, die Zahlen oder Zeichenketten sein können | StreifenPräfix | Wird verwendet, um den Pfad der ursprünglichen Anfrage abzuschneiden | Verwenden Sie Zahlen, um die Anzahl der zu trunkierten Pfade anzuzeigen | Wiederholen | Versuchen Sie es erneut für verschiedene Antworten | Rettries 、Statuses、Methoden、Serie | RequestSize | Stellen Sie die Größe der maximal angeforderten Pakete fest, die empfangen werden dürfen. Überschreitet die Paketgröße des Anforderungspakets den gesetzten Wert, wird 413 Payload Too Large zurückgegeben | Die Paketgröße der Anfragen beträgt Bytes und der Standardwert beträgt 5M | ModifyRequestBody | Ändern Sie den Inhalt des ursprünglichen Anforderungskörpers, bevor Sie die Anfrage weiterleiten | Der Inhalt des modifizierten Anforderungskörpers | ModifyResponseBody | Ändere den Inhalt des ursprünglichen Antwortkörpers | Der Inhalt des modifizierten Antwortkörpers | Vorgabe | Filter für alle Routen hinzufügen | Name und Wert der Filterfabrik |
Tipps: Jede Filterfabrik entspricht einer Implementierungsklasse, und dieseDer Name der Klasse muss mit GatewayFilterFactory enden.Dies ist eine Konvention von Spring Cloud Gateway, zum Beispiel ist die Implementierungsklasse, die AddRequestHeader entspricht, AddRequestHeaderGatewayFilterFactory. Freunde, die sich für den Quellcode interessieren, können bestimmte Klassennamen gemäß dieser Regel zusammenschneiden, um den Implementierungscode dieser eingebauten Filterfabriken zu finden.
1、AddRequestHeader GatewayFilter Factory
Fügen Sie der ursprünglichen Anfrage einen Header hinzu, Konfigurationsbeispiel:
Fügen Sie der ursprünglichen Anfrage einen Request-Header namens X-Request-Foo mit dem Wert Bar hinzu
2、AddRequestParameter GatewayFilter Factory
Fügen Sie Anfrageparameter und -werte zur ursprünglichen Anfrage hinzu, Konfigurationsbeispiel:
Füge der ursprünglichen Anfrage einen Parameter namens foo mit dem Wert bar hinzu, d.h.: foo=bar
3、AddResponseHeader GatewayFilter Factory
Füge der ursprünglichen Antwort einen Header hinzu, Konfigurationsbeispiel:
Füge der ursprünglichen Antwort einen Antwort-Header namens X-Request-Foo mit dem Wert Bar hinzu
4、DedupeResponseHeader GatewayFilter Factory
DedupeResponseHeader kann doppelte Werte in Response-Headern basierend auf dem konfigurierten Header-Namen und der Deduplizierungsrichtlinie entfernen, was eine neue Funktion von Spring Cloud Greenwich SR2 ist und unter dieser Version nicht verwendet werden kann.
WirWenn der CORS-Header (Solving Cross-Domain) sowohl am Gateway als auch am Microservice gesetzt ist und keine Konfiguration vorgenommen wird, dann > der Wert des CORS-Headers, der durch die Anfrage des -> Gateway -Microservice erhalten wird,, es wird so aussehen:
Sie sehen, dass die Werte dieser beiden Header dupliziert sind. Wenn Sie die Werte dieser beiden Header deduplizieren möchten, müssen Sie DedupeResponseHeader verwenden, Konfigurationsbeispiel:
Deduplizierungsstrategie:
- RETAIN_FIRST: Default, behalten Sie den ersten Wert
- RETAIN_LAST: Behalten Sie den letzten Wert
- RETAIN_UNIQUE: Alle einzigartigen Werte in der Reihenfolge behalten, in der sie zuerst erschienen sind.
Wenn Sie ein umfassenderes Verständnis der Filterfabrik erhalten möchten, wird empfohlen, den Quellcode der Filterfabrik zu lesen, da der Quellcode detaillierte Notizen und Beispiele enthält, die besser sind als die offizielle Dokumentation: org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory
5、Hystrix GatewayFilter Factory
Einführung des Sicherungsschutzes von Hystrix für Routen, Konfigurationsbeispiel:
Hystrix ist die erste Generation fehlertoleranter Komponenten von Spring Cloud, ist aber in den Wartungsmodus eingetreten, und Hystrix wird in Zukunft von Spring Cloud entfernt und durch Alibaba Sentinel/Resilience4J ersetzt. Dieser Artikel wird also nicht ins Detail gehen; falls Sie interessiert sind, können Sie die offizielle Dokumentation konsultieren: Hystrix GatewayFilter Factory
6、FallbackHeaders GatewayFilter Factory
Ebenfalls Hystrix unterstützt, unterstützt die im vorherigen Abschnitt beschriebene Filterfabrik einen Konfigurationsparameter: fallbackUri, der verwendet wird, um Anfragen an eine bestimmte URI weiterzuleiten, wenn eine Ausnahme auftritt. Die FallbackHeaders-Filterfabrik kann beim Weiterleiten einer Anfrage an die URI einen Header hinzufügen, und der Wert dieses Headers ist die spezifische Ausnahmeinformation. Konfigurationsbeispiel:
Ich werde hier nicht ins Detail gehen, falls du interessiert bist, kannst du die offizielle Dokumentation konsultieren: FallbackHeaders GatewayFilter Factory
7、PrefixPath GatewayFilter Factory
Fügen Sie dem ursprünglichen Anfragepfad einen Präfixpfad hinzu, Konfigurationsbeispiel:
Diese Konfiguration macht den Besuch bei ${GATEWAY_URL}/hello weitergeleitet anhttps://example.org/mypath/hello
8、PreserveHostHeader GatewayFilter Factory
Füge der Anfrage eine Eigenschaft preserveHostHeader=true hinzu, die der Routing-Filter prüft, um zu entscheiden, ob der ursprüngliche Host-Header gesendet wird. Konfigurationsbeispiel:
Wenn nicht gesetzt, wird der Header namens Host vom HTTP-Client gesteuert.
9、RequestRateLimiter GatewayFilter Factory
Er wird verwendet, um Anfragen zu drosseln, und der Drosselalgorithmus ist ein Token-Bucket. Konfigurationsbeispiel:
10、RedirectTo GatewayFilter Factory
Leite die ursprüngliche Anfrage auf die angegebene URL um, Konfigurationsbeispiel:
Mit dieser Konfiguration wird der Zugriff auf ${GATEWAY_URL}/hello auf umgeleitet https://acme.org/hello , und einen tragenLocation:http://acme.orgHeader, während der HTTP-Statuscode, der den Client zurückgibt, 302 ist
Notizen:
Der HTTP-Statuscode sollte 3xx sein, z. B. 301
Die URL muss eine legitime URL sein, die als Wert des Location Headers dient
11、RemoveHopByHopHeadersFilter GatewayFilter Factory
Für die ursprüngliche Anfrage, eine von der IETF-Organisation festgelegte Reihe von Headern zu entfernen, sind die standardmäßig gelöschten Header wie folgt:
- Verbindung
- Bleib am Leben
- Proxy-Authentifizierung
- Proxy-Autorisierung
- TE
- Anhänger
- Transfer-Kodierung
- Upgrade
Du kannst angeben, welche Header nur über die Konfiguration gelöscht werden, Konfigurationsbeispiel:
12、RemoveRequestHeader GatewayFilter Factory
Um einen Header für die ursprüngliche Anfrage zu entfernen, konfigurieren Sie ein Beispiel:
Entferne den Request-Header namens X-Request-Foo aus der ursprünglichen Anfrage
13、RemoveResponseHeader GatewayFilter Factory
Um einen Header für die ursprüngliche Antwort zu entfernen, konfigurieren Sie ein Beispiel:
Entferne den Antwort-Header namens X-Request-Foo aus der ursprünglichen Antwort
14、RewritePath GatewayFilter Factory
Überschreiben des ursprünglichen Anfragepfads mit einem regulären Ausdruck, Konfigurationsbeispiel:
Diese Konfiguration erlaubt den Zugriff auf /foo/bar, um den Pfad nach /bar umzuschreiben und weiterzuleiten, d. h. weitergeleitet an https://example.org/bar。 Beachten Sie, dass aufgrund der YAML-Syntax $\ anstelle von $ verwendet werden muss
15、RewriteResponseHeader GatewayFilter Factory
Schreibe einen Header in der ursprünglichen Antwort um, Konfigurationsbeispiel:
Die Bedeutung dieser Konfiguration besteht darin, dass, wenn der Wert von X-Response-Foo im Response-Header /42?user=ford&password=omg!what&flag=true ist, er gemäß dem konfigurierten Wert zu /42?user=ford&password=***&flag=true umgeschrieben wird, also das password=omg!what, wird zu password=*** umgeschrieben
16、SaveSession GatewayFilter Factory
Bevor Sie die Anfrage weiterleiten, setzen Sie die WebSession::save-Operation durch, Konfigurationsbeispiel:
Es wird hauptsächlich für die aufgeschobene Datenspeicherung verwendet (Daten werden nicht sofort gespeichert) wie Spring Session und möchte sicherstellen, dass der Sitzungszustand vor der Weiterleitung der Anfrage gespeichert wird. Wenn Sie Spring Secutiry in Spring Session integrieren und sicherstellen möchten, dass alle Sicherheitsinformationen an nachgelagerte Maschinen übertragen werden, müssen Sie diesen Filter konfigurieren.
17、secureHeaders GatewayFilter Factory
Die secureHeaders-Filterfabrik basiert hauptsächlich auf den Empfehlungen in diesem Blog und fügt eine Reihe von Response-Headern hinzu, die eine Sicherheitsrolle in der ursprünglichen Antwort spielen. Standardmäßig werden folgende Header (einschließlich Werte) hinzugefügt:
- 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
Wenn Sie die Werte dieser Header modifizieren möchten, müssen Sie die entsprechenden Suffixe dieser Header verwenden, wie folgt:
- xss-protection-header
- Streng-Transport-Sicherheit
- Rahmenoptionen
- Inhaltstyp-Optionen
- Vermittler-Politik
- Inhalts-Sicherheitsrichtlinie
- Download-Optionen
- erlaubte-domänenübergreifende Richtlinien
Konfigurationsbeispiel:
Wenn Sie bestimmte Header deaktivieren möchten, können Sie folgende Konfiguration verwenden:
18、SetPath GatewayFilter Factory
Ändern Sie den ursprünglichen Anfragepfad und konfigurieren Sie ein Beispiel:
Diese Konfiguration führt dazu, dass es beim Zugriff an ${GATEWAY_URL}/foo/bar weitergeleitet wirdhttps://example.org/bar , das heißt, das ursprüngliche /foo/bar wurde zu /bar geändert
19、SetResponseHeader GatewayFilter Factory
Ändern Sie den Wert eines Headers in der ursprünglichen Antwort, konfigurieren Sie ein Beispiel:
Ändere den Wert von X-Response-Foo in der ursprünglichen Antwort auf Bar
20、SetStatus GatewayFilter Factory
Ändern Sie den Statuscode der ursprünglichen Antwort, Konfigurationsbeispiel:
Der Wert von SetStatusd kann entweder eine Zahl oder eine Zeichenkette sein. Aber es muss der Wert in der Spring HttpStatus-Aufzählungsklasse sein. Beide oben genannten Konfigurationen können den HTTP-Statuscode 401 zurückgeben.
21、StripPrefix GatewayFilter Factory
Um den Pfad der ursprünglichen Anfrage abzuschneiden, Konfigurationsbeispiel:
Wie in der obigen Konfiguration gezeigt, wird der angeforderte Pfad /name/bar/foo auf /foo abgeschnitten und weitergeleitet, das heißt, zwei Pfade werden abgeschnitten.
22、Retry GatewayFilter Factory
Versuchen Sie es erneut für verschiedene Antworten, z. B. für HTTP-Statuscodes, Konfigurationsbeispiel:
Folgende Parameter können konfiguriert werden:
- Wiederholungen: Die Anzahl der Wiederholungen
- Statuses: Der Statuscode, der erneut ausprobiert werden muss, setzt in org.springframework.http.Http.HttpStatus
- Methoden: Die Anfragemethode, die erneut ausprobiert werden muss, mit einem Wert in org.springframework.http.Http.HttpMethod
- series:HTTP-Statuscode-Sequenz, mit einem Wert in org.springframework.http.Http.HttpStatus.Series
23、RequestSize GatewayFilter Factory
Stellen Sie die Größe der maximal zulässigen Anfragepakete ein, Konfigurationsbeispiel:
Überschreitet die Paketgröße der Anfrage den gesetzten Wert, wird eine 413 Payload Too Large zusammen mit einer errorMessage zurückgegeben
24、Modify Request Body GatewayFilter Factory
Ändere den ursprünglichen Inhalt des Anforderungskörpers, bevor du die Anfrage weiterleitest; die Filterfabrik kann nur per Code konfiguriert werden, nicht in der Konfigurationsdatei. Codebeispiel:
Tipps: Diese Filterfabrik ist im BETA-Zustand und die API könnte sich in Zukunft ändern.Bitte nutzen Sie die Produktionsumgebung mit Vorsicht
25、Modify Response Body GatewayFilter Factory
Die Filterfabrik kann auch verwendet werden, um den Inhalt des ursprünglichen Antwortkörpers zu verändern, und die Filterfabrik kann nur per Code konfiguriert werden, nicht in der Konfigurationsdatei. Codebeispiel:
Tipps: Diese Filterfabrik befindet sich im BETA-Zustand, die API könnte sich in Zukunft ändern, bitte verwenden Sie sie mit Vorsicht in der Produktionsumgebung
26、Default Filters
Default Filters werden verwendet, um allen Routen eine Filterfabrik hinzuzufügen, das heißt, um durchzugehenDer vom Standardfilter werkseitig konfigurierte Filter gilt für alle Routen。 Konfigurationsbeispiel:
(Ende)
|