Ingebouwde filterfabriek
Hier is een eenvoudige tabel van alle filterfabrieken die in Spring Cloud Gateway zijn ingebouwd, die niet erg gedetailleerd is, maar wel als een kort overzicht kan dienen. Als volgt:
Filterfabriek | functie | parameter | AddRequestHeader | Voeg een Header toe aan het oorspronkelijke verzoek | Headernaam en -waarde | AddRequestParameter | Voeg verzoekparameters toe aan het oorspronkelijke verzoek | Parameternaam en waarde | AddResponseHeader | Voeg een header toe aan het oorspronkelijke antwoord | Headernaam en -waarde | DedupeResponseHeader | Weigert dubbele waarden in de responsheader | De headernaam en deduplicatiestrategie die gededupliceerd moeten worden | Hystrix | Introduceer de zekeringbescherming van Hystrix voor de route | De naam van HystrixCommand | FallbackHeaders | Voeg specifieke uitzonderingsinformatie toe aan de requestheader van de fallbackUri | Naam van de kop | PrefixPath | Voeg een prefix toe aan het oorspronkelijke verzoekpad | Voorvoegselpad | PreserveHostHeader | Voeg een preserveHostHeader=true eigenschap toe aan het verzoek, die door het routeringsfilter wordt gecontroleerd om te bepalen of je de originele Host wilt sturen | niet | RequestRateLimiter | Het throttling-algoritme wordt gebruikt om verzoeken te beperken en is een tokenbucket | keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus | Doorverwijzing naar | Stuur het oorspronkelijke verzoek om naar de opgegeven URL | HTTP-statuscode en doorverwijzings-URL | VerwijderenHopByHopHeadersFilter | Verwijder een reeks headers die door de IETF-organisatie voor het oorspronkelijke verzoek zijn voorgeschreven | Dit is standaard ingeschakeld, en je kunt via de configuratie alleen aangeven welke headers verwijderd moeten worden | RemoveRequestHeader | Verwijder een header voor het oorspronkelijke verzoek | Headernaam | RemoveResponseHeader | Verwijder een header voor het oorspronkelijke antwoord | Headernaam | RewritePath | Herschrijf het oorspronkelijke verzoekpad | De oorspronkelijke pad-regex en de regex van het herschreven pad | RewriteResponseHeader | Herschrijf een header in de oorspronkelijke reactie | Headernaam, reguliere uitdrukking van waarde, herschreven waarde | SaveSession | Handhaaf de WebSession::save-operatie voordat je het verzoek doorstuurt | niet | secureHeaders | Voeg een reeks responsheaders toe die als beveiliging dienen aan de oorspronkelijke reactie | Geen enkele, je kunt de waarden van deze beveiligingsresponsheaders aanpassen | SetPath | Wijzig het oorspronkelijke aanvraagpad | Gemodificeerd pad | SetResponseHeader | Wijzig de waarde van een header in het oorspronkelijke antwoord | Headernaam, de gewijzigde waarde | SetStatus | Wijzig de statuscode van het oorspronkelijke antwoord | HTTP-statuscodes, die getallen of strings kunnen zijn. | StripPrefix | Gebruikt om het pad van het oorspronkelijke verzoek af te korten | Gebruik getallen om het aantal paden aan te geven dat afgeknott moet worden | Opnieuw | Probeer opnieuw voor verschillende antwoorden | Retries 、Statuses、Methods、Series | RequestSize | Stel de grootte in van het maximale aantal gevraagde pakketten dat ontvangen mag worden. Als de grootte van het verzoekpakket de ingestelde waarde overschrijdt, wordt 413 Payload Too Large teruggegeven | De grootte van het request-pakket is in bytes en de standaardwaarde is 5M | WijzigenVerzoekLichaam | Wijzig de inhoud van de oorspronkelijke verzoekbody voordat je het verzoek doorstuurt | De inhoud van de gewijzigde verzoekbody | ModifiifyResponseBody | Wijzig de inhoud van de oorspronkelijke responsinhoud | De inhoud van de aangepaste responsinhoud | Verstek | Voeg filters toe voor alle routes | Naam en waarde van de filterfabriek |
Tips: Elke filterfabriek komt overeen met een implementatieklasse, en dezeDe naam van de klasse moet eindigen met GatewayFilterFactoryDit is een conventie van Spring Cloud Gateway; bijvoorbeeld, de implementatieklasse die overeenkomt met AddRequestHeader is AddRequestHeaderGatewayFilterFactory. Vrienden die geïnteresseerd zijn in de broncode kunnen specifieke klassennamen volgens deze regel samenvoegen om de implementatiecode van deze ingebouwde filterfabrieken te vinden.
1、AddRequestHeader GatewayFilter Factory
Voeg een header toe aan het oorspronkelijke verzoek, configuratievoorbeeld:
Voeg een requestheader toe genaamd X-Request-Foo met de waarde Bar aan het oorspronkelijke verzoek
2、AddRequestParameter GatewayFilter Factory
Voeg verzoekparameters en -waarden toe aan het oorspronkelijke verzoek, configuratievoorbeeld:
Voeg een parameter genaamd foo met de waarde bar toe aan het oorspronkelijke verzoek, namelijk: foo=bar
3、AddResponseHeader GatewayFilter Factory
Voeg een header toe aan de oorspronkelijke respons, configuratievoorbeeld:
Voeg een responsheader toe genaamd X-Request-Foo met de waarde Bar aan het oorspronkelijke antwoord
4、DedupeResponseHeader GatewayFilter Factory
DedupeResponseHeader kan dubbele waarden verwijderen in responsheaders op basis van de geconfigureerde headernaam en het deduplicatiebeleid, wat een nieuwe functie is van Spring Cloud Greenwich SR2 en niet kan worden gebruikt onder deze versie.
WijAls de CORS (Solving Cross-Domain) Header zowel op de Gateway als op de microservice is ingesteld, en er geen configuratie wordt gemaakt, dan wordt de waarde van de CORS-header verkregen door het aanvragen van de -> Gateway -> microservice, zal het er zo uitzien:
Je kunt zien dat de waarden van deze twee headers worden gedupliceerd; als je de waarden van deze twee headers wilt dedupliceren, moet je DedupeResponseHeader gebruiken, configuratievoorbeeld:
Deduplicatiestrategie:
- RETAIN_FIRST: Default, behoud de eerste waarde
- RETAIN_LAST: Houd de laatste waarde
- RETAIN_UNIQUE: Houd alle unieke waarden in de volgorde waarin ze voor het eerst verschenen
Als je een uitgebreider begrip van de filterfabriek wilt krijgen, wordt aanbevolen de broncode van de filterfabriek te lezen, omdat de broncode gedetailleerde notities en voorbeelden bevat, wat beter is dan de officiële documentatie: org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory
5、Hystrix GatewayFilter Factory
Introductie van Hystrix' circuit breaker-beveiliging voor routes, configuratievoorbeeld:
Hystrix is de eerste generatie fouttolerante componenten van Spring Cloud, maar is in onderhoudsmodus gegaan, en Hystrix zal in de toekomst worden vervangen door Spring Cloud, vervangen door Alibaba Sentinel/Resilience4J. Dit artikel zal niet in detail treden; als je geïnteresseerd bent, kun je de officiële documentatie raadplegen: Hystrix GatewayFilter Factory
6、FallbackHeaders GatewayFilter Factory
Ook Hystrix ondersteunt de filterfabriek zoals beschreven in de vorige sectie een configuratieparameter: fallbackUri, die wordt gebruikt om verzoeken door te sturen naar een specifieke URI wanneer er een uitzondering optreedt. De FallbackHeaders-filterfabriek kan een header toevoegen bij het doorsturen van een verzoek naar de URI, en de waarde van deze header is de specifieke uitzonderingsinformatie. Configuratievoorbeeld:
Ik zal hier niet in detail treden, als je geïnteresseerd bent, kun je de officiële documentatie raadplegen: FallbackHeaders GatewayFilter Factory
7、PrefixPath GatewayFilter Factory
Voeg een prefixpad toe aan het oorspronkelijke verzoekpad, configuratievoorbeeld:
Deze configuratie maakt het bezoek aan ${GATEWAY_URL}/hello doorgestuurd naarhttps://example.org/mypath/hello
8、PreserveHostHeader GatewayFilter Factory
Voeg een preserveHostHeader=true-eigenschap toe aan het verzoek, die het routeringsfilter controleert om te beslissen of de originele Host Header wordt verzonden. Configuratievoorbeeld:
Als deze niet is ingesteld, wordt de header genaamd Host beheerd door de Http-client
9、RequestRateLimiter GatewayFilter Factory
Het wordt gebruikt om verzoeken te beperken, en het throttling-algoritme is een tokenbucket. Configuratievoorbeeld:
10、RedirectTo GatewayFilter Factory
Stuur het oorspronkelijke verzoek om naar de opgegeven URL, configuratievoorbeeld:
Deze configuratie maakt toegang tot ${GATEWAY_URL}/hello doorgestuurd naar https://acme.org/hello , en draag er éénLocation:http://acme.orgHeader, terwijl de HTTP-statuscode die de client teruggeeft 302 is
Notities:
De HTTP-statuscode moet 3xx zijn, bijvoorbeeld 301
De URL moet een legitieme URL zijn die dient als de waarde van de locatieheader
11、RemoveHopByHopHeadersFilter GatewayFilter Factory
Voor het oorspronkelijke verzoek om een reeks headers te verwijderen die door de IETF-organisatie zijn gespecificeerd, zijn de standaard verwijderde headers als volgt:
- Verbinding
- Keep-Alive
- Proxy-authenticatie
- Proxy-autorisatie
- TE
- Aanhangwagen
- Overdracht-codering
- Opwaarderen
Je kunt aangeven welke headers alleen via de configuratie worden verwijderd, configuratievoorbeeld:
12、RemoveRequestHeader GatewayFilter Factory
Om een header voor het oorspronkelijke verzoek te verwijderen, configureer je een voorbeeld:
Verwijder de requestheader genaamd X-Request-Foo uit het oorspronkelijke verzoek
13、RemoveResponseHeader GatewayFilter Factory
Om een header voor het oorspronkelijke antwoord te verwijderen, configureer je een voorbeeld:
Verwijder de response-header genaamd X-Request-Foo uit het oorspronkelijke antwoord
14、RewritePath GatewayFilter Factory
Het oorspronkelijke verzoekpad overschrijven met een reguliere expressie, configuratievoorbeeld:
Deze configuratie maakt toegang tot /foo/bar mogelijk om het pad naar /bar te herschrijven en door te sturen, dat wil zeggen doorgestuurd naar https://example.org/bar。 Let op dat vanwege de YAML-syntaxis $\ in plaats van $ moet worden gebruikt
15、RewriteResponseHeader GatewayFilter Factory
Herschrijf een header in de originele reactie, configuratievoorbeeld:
Het belang van deze configuratie is dat als de waarde van X-Response-Foo in de responsheader /42?user=ford&password=omg!what&flag=true is, deze wordt herschreven naar /42?user=ford&password=***&flag=true volgens de geconfigureerde waarde, dat wil zeggen, password=omg!what wordt herschreven naar password=***
16、SaveSession GatewayFilter Factory
Voordat je het verzoek doorstuurt, handhaaf je de WebSession::save-operatie, configuratievoorbeeld:
Het wordt voornamelijk gebruikt voor uitgestelde gegevensopslag (data wordt niet direct opgeslagen) zoals Spring Session, en wil ervoor zorgen dat de sessiestatus wordt opgeslagen voordat het verzoek wordt doorgestuurd. Als je Spring Secutiry integreert in Spring Session en wilt zorgen dat alle beveiligingsinformatie naar downstream-machines wordt verzonden, moet je dit filter configureren.
17、secureHeaders GatewayFilter Factory
De secureHeaders-filterfabriek is voornamelijk gebaseerd op de aanbevelingen in deze blog, waarbij een reeks response headers wordt toegevoegd die een beveiligingsrol spelen in de oorspronkelijke reactie. Standaard worden de volgende Headers (inclusief waarden) toegevoegd:
- 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
Als je de waarden van deze headers wilt aanpassen, moet je de bijbehorende achtervoegsels van deze headers gebruiken, als volgt:
- xss-protection-header
- streng-transport-beveiliging
- Frame-opties
- Inhoudstype-opties
- Verwijzingsbeleid
- Inhoud-Beveiligingsbeleid
- Downloadopties
- toegestaan-cross-domein-beleidslijnen
Configuratievoorbeeld:
Als je bepaalde headers wilt uitschakelen, kun je de volgende configuratie gebruiken:
18、SetPath GatewayFilter Factory
Pas het oorspronkelijke verzoekpad aan en configureer een voorbeeld:
Deze configuratie zorgt ervoor dat het wordt doorgestuurd naar ${GATEWAY_URL}/foo/bar wanneer het wordt geopendhttps://example.org/bar , dat wil zeggen, de oorspronkelijke /foo/bar is veranderd in /bar
19、SetResponseHeader GatewayFilter Factory
Wijzig de waarde van een header in de oorspronkelijke reactie, configureer een voorbeeld:
Wijzig de waarde van X-Response-Foo in het oorspronkelijke antwoord op Bar
20、SetStatus GatewayFilter Factory
Wijzig de statuscode van de oorspronkelijke reactie, configuratievoorbeeld:
De waarde van SetStatusd kan een getal of een string zijn. Maar het moet wel de waarde zijn in de Spring HttpStatus enumeratieklasse. Beide bovenstaande configuraties kunnen de HTTP-statuscode 401 teruggeven.
21、StripPrefix GatewayFilter Factory
Voor het afkappen van het pad van het oorspronkelijke verzoek, configuratievoorbeeld:
Zoals te zien is in de bovenstaande configuratie, als het gevraagde pad /name/bar/foo is, wordt het afgekapt naar /foo en doorgestuurd, dat wil zeggen, 2 paden worden afgekapt.
22、Retry GatewayFilter Factory
Probeer opnieuw voor verschillende reacties, bijvoorbeeld voor HTTP-statuscodes, configuratievoorbeeld:
De volgende parameters kunnen worden geconfigureerd:
- Herkansingen: Het aantal herpogingen
- Statuss: De statuscode die opnieuw geprobeerd moet worden, ingesteld in org.springframework.http.Http.HttpStatus
- methoden: De aanvraagmethode die opnieuw geprobeerd moet worden, met een waarde in org.springframework.http.Http.HttpMethod
- series:HTTP statuscodesequentie, met een waarde in org.springframework.http.HttpStatus.Series
23、RequestSize GatewayFilter Factory
Stel de grootte in van het maximale aantal toegestane verzoekpakketten dat ontvangen mag worden, configuratievoorbeeld:
Als de grootte van het verzoekpakket de ingestelde waarde overschrijdt, wordt een 413 Payload Too Large geretourneerd samen met een errorMessage
24、Modify Request Body GatewayFilter Factory
Wijzig de inhoud van de oorspronkelijke requestbody voordat het verzoek wordt doorgestuurd; de filterfabriek kan alleen per code worden geconfigureerd, niet in het configuratiebestand. Codevoorbeeld:
Tips: Deze filterfabriek is in BETA-staat en de API kan in de toekomst veranderen.Gebruik de productieomgeving met voorzichtigheid
25、Modify Response Body GatewayFilter Factory
De filterfabriek kan ook worden gebruikt om de inhoud van de oorspronkelijke responsinhoud te wijzigen, en de filterfabriek kan alleen per code worden geconfigureerd, niet in het configuratiebestand. Codevoorbeeld:
Tips: Deze filterfabriek is in BETA-toestand, de API kan in de toekomst veranderen, gebruik hem met voorzichtigheid in de productieomgeving
26、Default Filters
Default Filters wordt gebruikt om een filterfabriek toe te voegen aan alle routes, dat wil zeggen, om door te latenHet filter, fabrieksgeconfigureerd door het Default Filter, wordt toegepast op alle routes。 Configuratievoorbeeld:
(Einde)
|