Innebygd filterfabrikk
Her er en enkel tabell over alle filterfabrikkene som er bygget inn i Spring Cloud Gateway, som ikke er veldig detaljert, men kan brukes som en rask oversikt. Som følger:
Filterfabrikk | funksjon | parameter | AddRequestHeader | Legg til en overskrift i den opprinnelige forespørselen | Headernavn og verdi | AddRequestParameter | Legg til forespørselsparametere til den opprinnelige forespørselen | Parameternavn og verdi | AddResponseHeader | Legg til en header i det opprinnelige svaret | Headernavn og verdi | DedupeResponseHeader | Avviser dupliserte verdier i responsheaderen | Header-navnet og dedupliseringsstrategien som må dedupliseres | Hystrix | Innfør Hystrix' sikringssikring for ruten | Navnet HystrixCommand | FallbackHeaders | Legg til spesifikk unntaksinformasjon i forespørselsheaderen til fallbackUri | Overskriftens navn | PrefixPath | Legg til et prefiks på den opprinnelige forespørselsstien | Prefikssti | PreserveHostHeader | Legg til en preserveHostHeader=true-egenskap til forespørselen, som rutingsfilteret sjekker for å avgjøre om du vil sende den opprinnelige verten | ikke | RequestRateLimiter | Brukt for å strupe forespørsler, er throttling-algoritmen en tokenbøtte | keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus | OmdirigerTil | Omdiriger den opprinnelige forespørselen til den angitte URL-en | HTTP-statuskode og omdirigerings-URL | FjernHopByHopHeadersFilter | Fjern en serie headere foreskrevet av IETF-organisasjonen for den opprinnelige forespørselen | Dette er aktivert som standard, og du kan spesifisere hvilke headere som skal slettes gjennom konfigurasjonen | RemoveRequestHeader | Slett en header for den opprinnelige forespørselen | Header-navn | RemoveResponseHeader | Fjern en header for det opprinnelige svaret | Header-navn | RewritePath | Skriv om den opprinnelige forespørselsstien | Den opprinnelige sti-regexen og regexen til den omskrevne stien | RewriteResponseHeader | Skriv om en header i det opprinnelige svaret | Header-navn, regulært uttrykk av verdi, omskrevet verdi | SaveSession | Håndhev WebSession::save-operasjonen før du videresender forespørselen | ikke | secureHeaders | Legg til en serie svarheadere som fungerer som sikkerhet til det opprinnelige svaret | Ingen, du kan endre verdiene til disse sikkerhetsresponshodene | SetPath | Endre den opprinnelige forespørselsstien | Modifisert sti | SetResponseHeader | Endre verdien til en header i det opprinnelige svaret | Header-navn, den modifiserte verdien | SetStatus | Endre statuskoden til det opprinnelige svaret | HTTP-statuskoder, som kan være tall eller strenger | StripPrefiks | Brukt til å forkorte stien til den opprinnelige forespørselen | Bruk tall for å angi antall stier som skal avkortes | Prøve | Prøv igjen for ulike svar | Retries 、Statuses、Methods、Series | RequestSize | Sett størrelsen på de maksimale forespurte pakkene som er tillatt å bli mottatt. Hvis forespørselspakkestørrelsen overstiger den satte verdien, returneres 413 Payload Too Large | Forespørselspakkestørrelsen er i bytes, og standardverdien er 5M | ModificeRequestBody | Endre innholdet i den opprinnelige forespørselsdelen før du videresender forespørselen | Innholdet i den modifiserte forespørselsdelen | ModifiserResponsKropp | Endre innholdet i den opprinnelige responsdelen | Innholdet i den modifiserte responsdelen | Standard | Legg til filtre for alle ruter | Filterfabrikkens navn og verdi |
Tips: Hver filterfabrikk tilsvarer en implementeringsklasse, og disseNavnet på klassen må avsluttes med GatewayFilterFactoryDette er en konvensjon i Spring Cloud Gateway, for eksempel er implementasjonsklassen som tilsvarer AddRequestHeader AddRequestHeaderGatewayFilterFactory. Venner som er interessert i kildekoden kan spleise spesifikke klassenavn i henhold til denne regelen for å finne implementasjonskoden til disse innebygde filterfabrikkene.
1、AddRequestHeader GatewayFilter Factory
Legg til en header i den opprinnelige forespørselen, konfigurasjonseksempel:
Legg til en forespørselsheader kalt X-Request-Foo med verdien Bar til den opprinnelige forespørselen
2、AddRequestParameter GatewayFilter Factory
Legg til forespørselsparametere og verdier til den opprinnelige forespørselen, konfigurasjonseksempel:
Legg til en parameter kalt foo med verdien bar til den opprinnelige forespørselen, altså: foo=bar
3、AddResponseHeader GatewayFilter Factory
Legg til en header i det opprinnelige svaret, konfigurasjonseksempel:
Legg til en responsheader kalt X-Request-Foo med verdien Bar til det opprinnelige svaret
4、DedupeResponseHeader GatewayFilter Factory
DedupeResponseHeader kan fjerne dupliserte verdier i responsheadere basert på det konfigurerte headernavnet og dedupliseringspolicyen, som er en ny funksjon fra Spring Cloud Greenwich SR2 og ikke kan brukes under denne versjonen.
ViHvis CORS (Solving Cross-Domain)-headeren er satt både på gatewayen og mikrotjenesten, og ingen konfigurasjon gjøres, oppnås verdien av CORS-headeren ved å be om -> Gateway -> mikrotjenesten, det vil være slik:
Du kan se at verdiene til disse to headerne er dupliserte, hvis du vil deduplisere verdiene til disse to headerne, må du bruke DedupeResponseHeader, konfigurasjonseksempel:
Dedupliseringsstrategi:
- RETAIN_FIRST: Standard, behold den første verdien
- RETAIN_LAST: Behold siste verdi
- RETAIN_UNIQUE: Behold alle unike verdier i den rekkefølgen de først dukket opp
Hvis du ønsker å få en mer omfattende forståelse av filterfabrikken, anbefales det å lese kildekoden til filterfabrikken, fordi kildekoden inneholder detaljerte notater og eksempler, noe som er bedre enn den offisielle dokumentasjonen: org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory
5、Hystrix GatewayFilter Factory
Vi introduserer Hystrix' sikringssikring for ruter, konfigurasjonseksempel:
Hystrix er den første generasjonen feiltolerante komponenter i Spring Cloud, men den har gått inn i vedlikeholdsmodus, og Hystrix vil bli fjernet av Spring Cloud i fremtiden, erstattet av Alibaba Sentinel/Resilience4J. Så denne artikkelen vil ikke gå i detalj, hvis du er interessert, kan du se den offisielle dokumentasjonen: Hystrix GatewayFilter Factory
6、FallbackHeaders GatewayFilter Factory
Filterfabrikken beskrevet i forrige avsnitt støtter også Hystrix og støtter en konfigurasjonsparameter: fallbackUri, som brukes til å videresende forespørsler til en spesifikk URI når et unntak oppstår. FallbackHeaders-filterfabrikken kan legge til en header når en forespørsel videresendes til URI, og verdien av denne headeren er den spesifikke unntaksinformasjonen. Konfigurasjonseksempel:
Jeg skal ikke gå i detalj her, hvis du er interessert kan du se i den offisielle dokumentasjonen: FallbackHeaders GatewayFilter Factory
7、PrefixPath GatewayFilter Factory
Legg til en prefikssti til den opprinnelige forespørselsstien, konfigurasjonseksempel:
Denne konfigurasjonen gjør at besøket til ${GATEWAY_URL}/hello videresendes tilhttps://example.org/mypath/hello
8、PreserveHostHeader GatewayFilter Factory
Legg til en preserveHostHeader=true-egenskap til forespørselen, som rutingsfilteret sjekker for å avgjøre om den opprinnelige Host Header skal sendes. Konfigurasjonseksempel:
Hvis den ikke er satt, vil headeren kalt Host bli kontrollert av Http-klienten
9、RequestRateLimiter GatewayFilter Factory
Den brukes til å strupe forespørsler, og throttling-algoritmen er en tokenbøtte. Konfigurasjonseksempel:
10、RedirectTo GatewayFilter Factory
Omdiriger den opprinnelige forespørselen til den angitte URL-en, konfigurasjonseksempel:
Denne konfigurasjonen gjør at tilgangen til ${GATEWAY_URL}/hello omdirigeres til https://acme.org/hello , og bær énLocation:http://acme.orgHeader, mens HTTP-statuskoden som returnerer klienten er 302
Notater:
HTTP-statuskoden skal være 3xx, f.eks. 301
URL-en må være en legitim URL som fungerer som verdien til lokasjonsheaderen
11、RemoveHopByHopHeadersFilter GatewayFilter Factory
For den opprinnelige forespørselen om å fjerne en serie headers spesifisert av IETF-organisasjonen, er de standard slettede headerne som følger:
- Forbindelse
- Hold deg i live
- Proxy-autentisering
- Fullmaktsautorisasjon
- TE
- Tilhenger
- Overføringskoding
- Oppgradere
Du kan spesifisere hvilke headers som kun slettes gjennom konfigurasjonen, konfigurasjonseksempel:
12、RemoveRequestHeader GatewayFilter Factory
For å fjerne en header for den opprinnelige forespørselen, konfigurere et eksempel:
Fjern forespørselsheaderen kalt X-Request-Foo fra den opprinnelige forespørselen
13、RemoveResponseHeader GatewayFilter Factory
For å fjerne en header for det opprinnelige svaret, konfigurere et eksempel:
Fjern svarheaderen kalt X-Request-Foo fra det opprinnelige svaret
14、RewritePath GatewayFilter Factory
Overstyring av den opprinnelige forespørselsstien med et regulært uttrykk, konfigurasjonseksempel:
Denne konfigurasjonen gir tilgang til /foo/bar for å omskrive banen til /bar og videresende den, altså videresende til https://example.org/bar。 Merk at på grunn av YAML-syntaksen må $\ brukes i stedet for $
15、RewriteResponseHeader GatewayFilter Factory
Skriv om en header i det opprinnelige svaret, konfigurasjonseksempel:
Betydningen av denne konfigurasjonen er at hvis verdien til X-Response-Foo i responsheaderen er /42?user=ford&password=omg!what&flag=true, vil den bli omskrevet til /42?user=ford&password=***&flag=true i henhold til den konfigurerte verdien, det vil si password=omg!what vil bli omskrevet til password=***
16、SaveSession GatewayFilter Factory
Før du videresender forespørselen, håndhev WebSession::save-operasjonen, konfigurasjonseksempel:
Den brukes hovedsakelig til utsatt datalagring (data lagres ikke umiddelbart) som Spring Session, og ønsker å sikre at sesjonstilstanden lagres før forespørselen videresendes. Hvis du integrerer Spring Secutiry i Spring Session og vil sikre at all sikkerhetsinformasjon overføres til nedstrøms maskiner, må du konfigurere dette filteret.
17、secureHeaders GatewayFilter Factory
SecureHeaders-filterfabrikken er hovedsakelig basert på anbefalingene i denne bloggen, og legger til en serie svarheadere som spiller en sikkerhetsrolle i det opprinnelige svaret. Som standard legges følgende overskrifter (inkludert verdier) til:
- 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
Hvis du vil endre verdiene til disse headerne, må du bruke de tilsvarende suffiksene til disse headerne, som følger:
- xss-protection-header
- streng-transport-sikkerhet
- Rammevalg
- innholdstype-valg
- Henvisningspolicy
- Innholdssikkerhetspolicy
- Nedlastingsalternativer
- tillatte-tverrdomene-policyer
Konfigurasjonseksempel:
Hvis du vil deaktivere visse headers, kan du bruke følgende konfigurasjon:
18、SetPath GatewayFilter Factory
Endre den opprinnelige forespørselsstien og konfigurer et eksempel:
Denne konfigurasjonen gjør at den videresendes til ${GATEWAY_URL}/foo/bar når den åpneshttps://example.org/bar , det vil si at den opprinnelige /foo/bar ble endret til /bar
19、SetResponseHeader GatewayFilter Factory
Endre verdien til en header i det opprinnelige svaret, og konfigurer et eksempel:
Endre verdien av X-Response-Foo i det opprinnelige svaret til Bar
20、SetStatus GatewayFilter Factory
Endre statuskoden til det opprinnelige svaret, konfigurasjonseksempel:
Verdien til SetStatusd kan være enten et tall eller en streng. Men det må være verdien i Spring HttpStatus-enumerasjonsklassen. Begge de ovennevnte konfigurasjonene kan returnere HTTP-statuskode 401.
21、StripPrefix GatewayFilter Factory
For å avkorte stien til den opprinnelige forespørselen, konfigurasjonseksempel:
Som vist i konfigurasjonen ovenfor, hvis den forespurte stien er /name/bar/foo, vil den bli avkortet til /foo og videresendt, det vil si at 2 stier vil bli avkortet.
22、Retry GatewayFilter Factory
Prøv på nytt for ulike svar, f.eks. for HTTP-statuskoder, konfigurasjonseksempel:
Følgende parametere kan konfigureres:
- Omprøver: Antall forsøk
- statuses: Statuskoden som må prøves på nytt, satt i org.springframework.http.Http.HttpStatus
- metoder: Forespørselsmetoden som må prøves på nytt, med en verdi i org.springframework.http.Http.HttpMethod
- series:HTTP statuskodesekvens, med en verdi i org.springframework.http.HttpStatus.Series
23、RequestSize GatewayFilter Factory
Sett størrelsen på maksimalt antall forespørslingspakker som kan mottas, konfigurasjonseksempel:
Hvis størrelsen på forespørselspakken overstiger den satte verdien, returneres en 413 Payload Too Large sammen med en errorMessage
24、Modify Request Body GatewayFilter Factory
Endre innholdet i den opprinnelige forespørselsdelen før du videresender forespørselen, filterfabrikken kan kun konfigureres med kode, ikke i konfigurasjonsfilen. Kodeeksempel:
Tips: Denne filterfabrikken er i BETA-tilstand, og API-et kan endres i fremtiden.Vennligst bruk produksjonsmiljøet med forsiktighet
25、Modify Response Body GatewayFilter Factory
Filterfabrikken kan også brukes til å endre innholdet i den opprinnelige svarkroppen, og filterfabrikken kan kun konfigureres via kode, ikke i konfigurasjonsfilen. Kodeeksempel:
Tips: Denne filterfabrikken er i BETA-tilstand, API-et kan endres i fremtiden, vennligst bruk den med forsiktighet i produksjonsmiljøet
26、Default Filters
Standardfiltre brukes til å legge til en filterfabrikk på alle ruter, det vil si for å passereFilteret fabrikkkonfigurert av Standardfilteret vil gjelder for alle ruter。 Konfigurasjonseksempel:
(Slutt)
|