Fabrică de filtre încorporate
Iată un tabel simplu cu toate fabricile de filtre integrate în Spring Cloud Gateway, care nu este foarte detaliat, dar poate fi folosit ca o prezentare generală rapidă. Așa cum urmează:
Fabrica de filtre | funcționa | parametru | AddRequestHeader | Adaugă un Antet la cererea originală | Nume și valoare a antetului | AddRequestParameter | Adaugă parametri de cerere la cererea originală | Numele și valoarea parametrului | AddResponseHeader | Adaugă un antet la răspunsul original | Nume și valoare a antetului | DedupeResponseHeader | Respinge valorile duplicate în antetul răspunsului | Numele antetului și strategia de deduplicare care trebuie deduplicate | Hystrix | Introduceți protecția împotriva întrerupătoarelor Hystrix pentru traseu | Numele HystrixCommand | Elemente de rezervă | Adaugă informații specifice de excepție în antetul solicitării din FallbackUri | Numele antetului | PrefixPath | Adaugă un prefix pe calea cererii originale | Calea prefixului | Antetul PăstrăriiGazdului | Adaugă o proprietate preserveHostHeader=true la cerere, pe care filtrul de rutare o verifică pentru a decide dacă vrei să trimiți gazda originală | nu | RequestRateLimiter | Folosit pentru a limita cererile, algoritmul de limitare este un bucket de tokenuri | keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus | RedirecționareCătre | Redirecționează cererea originală către URL-ul specificat | Cod de stare HTTP și URL de redirecționare | RemoveHopByHopHeadersFilter | Eliminați o serie de antete prescrise de organizația IETF pentru cererea inițială | Acest lucru este activat implicit și poți specifica ce antete să ștergi doar prin configurare | RemoveRequestHeader | Șterge un antet pentru cererea originală | Numele antetului | RemoveResponseHeader | Elimină un antet pentru răspunsul original | Numele antetului | RewritePath | Rescrie calea cererii originale | Regexul original al căii și regexul traseului rescris | RewriteResponseHeader | Rescrie un antet în răspunsul original | Nume de antet, expresie regulată a valorii, valoare rescrisă | SaveSession | Aplică operațiunea WebSession::save înainte de a redirecționa cererea | nu | secureHeaders | Adaugă o serie de antete de răspuns care acționează ca securitate la răspunsul original | Niciunul, poți modifica valorile acestor antete de răspuns de securitate | SetPath | Modificarea traseului original al cererii | Calea modificată | SetResponseHeader | Modifică valoarea unui antet în răspunsul original | Numele antetului, valoarea modificată | SetStatus | Modifică codul de stare al răspunsului original | Coduri de stare HTTP, care pot fi numere sau șiruri | Prefix Strip | Folosit pentru a scurta calea cererii originale | Folosiți numere pentru a indica numărul de căi ce trebuie trunchiate | Reîncercare | Reîncearcă pentru răspunsuri diferite | resetări、status、methods、series | RequestSize | Setați dimensiunea pachetelor maxime solicitate care pot fi primite. Dacă dimensiunea pachetului de cerere depășește valoarea setată, se returnează 413 Payload Too Large | Dimensiunea pachetului de cerere este în octeți, iar valoarea implicită este 5M | ModifyRequestBody | Modificați conținutul original al corpului cererii înainte de a transmite cererea | Conținutul modificat al corpului cererii | ModifyResponseBody | Modifică conținutul corpului original al răspunsului | Conținutul corpului răspunsului modificat | Implicit | Adaugă filtre pentru toate rutele | Numele și valoarea fabricii filtrului |
Sfaturi: Fiecare fabrică de filtre corespunde unei clase de implementare, iar acesteaNumele clasei trebuie să se termine cu GatewayFilterFactoryAceasta este o convenție a Spring Cloud Gateway, de exemplu, clasa de implementare corespunzătoare AddRequestHeader este AddRequestHeaderGatewayFilterFactory. Prietenii interesați de codul sursă pot îmbina nume specifice de clase conform acestei reguli pentru a găsi codul de implementare al acestor fabrici de filtre încorporate.
1、AddRequestHeader GatewayFilter Factory
Adaugă un antet la cererea originală, exemplu de configurare:
Adaugă un antet de cerere numit X-Request-Foo cu valoarea Bar la cererea originală
2、AddRequestParameter GatewayFilter Factory
Adaugă parametri și valori de cerere la cererea originală, exemplu de configurare:
Adaugă un parametru numit foo cu valoarea bar la cererea originală, de exemplu: foo=bar
3、AddResponseHeader GatewayFilter Factory
Adaugă un antet la răspunsul original, exemplu de configurare:
Adaugă un antet de răspuns numit X-Request-Foo cu valoarea Bar la răspunsul original
4、DedupeResponseHeader GatewayFilter Factory
DedupeResponseHeader poate elimina valorile duplicate din anteturile de răspuns pe baza numelui antetului configurat și a politicii de deduplicare, care este o funcție nouă oferită de Spring Cloud Greenwich SR2 și care nu poate fi folosită sub această versiune.
NoiDacă antetul CORS (Solving Cross-Domain) este setat atât pe Gateway, cât și pe microserviciu, dacă nu se face nicio configurare, atunci valoarea antetului CORS obținută prin solicitarea microserviciului -> Gateway ->, va fi așa:
Poți vedea că valorile acestor două antete sunt duplicate, dacă vrei să deduplicezi valorile acestor două antete, trebuie să folosești DedupeResponseHeader, exemplu de configurare:
Strategie de deduplicare:
- RETAIN_FIRST: Implicit, păstrează prima valoare
- RETAIN_LAST: Păstrează ultima valoare
- RETAIN_UNIQUE: Păstrează toate valorile unice în ordinea în care au apărut inițial
Dacă vrei să ai o înțelegere mai cuprinzătoare a fabricii de filtre, este recomandat să citești codul sursă al fabricii de filtre, deoarece codul sursă conține note și exemple detaliate, ceea ce este mai bun decât documentația oficială: org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory
5、Hystrix GatewayFilter Factory
Prezentând protecția pentru întrerupătoare de circuit de la Hystrix pentru rute, exemplu de configurație:
Hystrix este prima generație de componente tolerante la defecte ale Spring Cloud, dar a intrat în modul de mentenanță, iar Hystrix va fi eliminat de Spring Cloud în viitor, fiind înlocuit de Alibaba Sentinel/Resilience4J. Așadar, acest articol nu va intra în detalii, dacă ești interesat, poți consulta documentația oficială: Hystrix GatewayFilter Factory
6、FallbackHeaders GatewayFilter Factory
De asemenea, suportând Hystrix, fabrica de filtre descrisă în secțiunea anterioară suportă un parametru de configurare: fallbackUri, care este folosit pentru a redirecționa cererile către un anumit URI atunci când apare o excepție. Fabrica de filtre FallbackHeaders poate adăuga un antet atunci când redirecționează o cerere către URI, iar valoarea acestui antet reprezintă informația specifică de excepție. Exemplu de configurație:
Nu voi intra în detalii aici, dacă ești interesat, poți consulta documentația oficială: FallbackHeaders GatewayFilter Factory
7、PrefixPath GatewayFilter Factory
Adaugă o cale prefix la calea de cerere originală, exemplu de configurare:
Această configurație face ca vizita către ${GATEWAY_URL}/hello să fie redirecționată cătrehttps://example.org/mypath/hello
8、PreserveHostHeader GatewayFilter Factory
Adaugă o proprietate preserveHostHeader=true la cerere, pe care filtrul de rutare o verifică pentru a decide dacă să trimită antetul gazdă original. Exemplu de configurație:
Dacă nu este setat, atunci antetul numit Host va fi controlat de Clientul Http
9、RequestRateLimiter GatewayFilter Factory
Este folosit pentru a limita cererile, iar algoritmul de limitare este un bucket de tokeni. Exemplu de configurație:
10、RedirectCătre GatewayFilter Factory
Redirecționează cererea originală către URL-ul specificat, exemplu de configurare:
Această configurație face ca accesul la ${GATEWAY_URL}/hello să fie redirecționat către https://acme.org/hello , și poartă unulLocation:http://acme.orgHeader, în timp ce codul HTTP care returnează clientul este 302
Note:
Codul de stare HTTP ar trebui să fie 3xx, de exemplu 301
URL-ul trebuie să fie un URL legitim care servește drept valoare pentru Antul de Locație
11、RemoveHopByHopHeadersFilter GatewayFilter Factory
Pentru cererea inițială de a elimina o serie de antete specificate de organizația IETF, anteturile șterse implicite sunt următoarele:
- Conexiune
- Menține-Vie
- Autentificare prin procură
- Autorizare prin procură
- TE
- Remorcă
- Transfer-Codificare
- Face upgrade
Poți specifica care antete sunt șterse doar prin configurație, exemplu de configurare:
12、RemoveRequestHeader GatewayFilter Factory
Pentru a elimina un antet pentru cererea originală, configurați un exemplu:
Eliminați antetul de cerere numit X-Request-Foo din cererea originală
13、RemoveResponseHeader GatewayFilter Factory
Pentru a elimina un antet pentru răspunsul original, configurați un exemplu:
Eliminați antetul de răspuns numit X-Request-Foo din răspunsul original
14、RewritePath GatewayFilter Factory
Suprascrierea căii originale a cererii cu o expresie regulată, exemplu de configurație:
Această configurație permite accesul la /foo/bar pentru a rescrie calea către /bar și a o redirecționa, adică a fi redirecționată către https://example.org/bar。 Rețineți că, din cauza sintaxei YAML, trebuie folosit $\ în loc de $
15、RewriteResponseHeader GatewayFilter Factory
Rescrie un antet în răspunsul original, exemplu de configurare:
Semnificația acestei configurații este că, dacă valoarea X-Response-Foo din antetul răspunsului este /42?user=ford&password=omg!what&flag=true, atunci va fi rescrisă în /42?user=ford&password=***&flag=true conform valorii configurate, adică parola=omg!ce va fi rescris în parolă=***
16、SaveSession GatewayFilter Factory
Înainte de a redirecționa cererea, aplică operația WebSession::save, exemplu de configurare:
Este folosit în principal pentru stocarea amânată a datelor (datele nu sunt menținute imediat), cum ar fi Spring Session, și urmărește să se asigure că starea sesiunii este salvată înainte ca cererea să fie redirecționată. Dacă integrezi Spring Security-ul în Spring Session și vrei să te asiguri că toate informațiile de securitate sunt transmise către mașinile ulterioare, trebuie să configurezi acest filtru.
17、secureHeaders GatewayFilter Factory
Fabrica de filtre secureHeaders se bazează în principal pe recomandările din acest blog, adăugând o serie de antete de răspuns care joacă un rol de securitate în răspunsul original. Implicit, următoarele antete (inclusiv valorile) sunt adăugate:
- 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
Dacă doriți să modificați valorile acestor antete, atunci trebuie să folosiți sufixele corespunzătoare acestor antete, după cum urmează:
- Xss-protect-header
- Securitate strictă a transporturilor
- Opțiuni de cadre
- opțiuni-tip-conținut
- Politica de referință
- Politică-Securitate-Conținut
- opțiuni de descărcare
- politici permise-cross-domain-
Exemplu de configurație:
Dacă doriți să dezactivați anumite antete, puteți folosi următoarea configurație:
18、SetPath GatewayFilter Factory
Modificați calea cererii originale și configurați un exemplu:
Această configurație îl face redirecționat la ${GATEWAY_URL}/foo/bar când este accesathttps://example.org/bar , adică /foo/bar original a fost schimbat în /bar
19、SetResponseHeader GatewayFilter Factory
Modifică valoarea unui antet în răspunsul original, configurează un exemplu:
Modifică valoarea X-Response-Foo în răspunsul original la Bar
20、SetStatus GatewayFilter Factory
Modifică codul de stare al răspunsului original, exemplu de configurare:
Valoarea lui SetStatusd poate fi fie un număr, fie un șir. Dar trebuie să fie valoarea din clasa de enumerare Spring HttpStatus. Ambele configurații de mai sus pot returna codul HTTP 401.
21、StripPrefix GatewayFilter Factory
Pentru trunchierea drumului cererii originale, exemplu de configurare:
Așa cum s-a arătat în configurația de mai sus, dacă calea solicitată este /name/bar/foo, atunci va fi trunchiată la /foo și redirecționată, adică 2 căi vor fi trunchiate.
22、Retry GatewayFilter Factory
Reîncearcă pentru răspunsuri diferite, de exemplu pentru coduri de stare HTTP, exemplu de configurare:
Următorii parametri pot fi configurați:
- reîncercări: Numărul de încercări
- statuses: Codul de stare care trebuie reîncercat, setat în org.springframework.http.HttpHttpStatus
- Metode: Metoda cererii care trebuie reîncercată, cu o valoare în org.springframework.http.HttpHttpMethod
- secvență de coduri de stare HTTP, cu o valoare în org.springframework.http.Http.HttpStatus.Series
23、RequestSize GatewayFilter Factory
Setați dimensiunea pachetelor maxime de solicitare permise să fie primite, exemplu de configurare:
Dacă dimensiunea pachetului de solicitare depășește valoarea setată, un 413 Payload Too Large este returnat împreună cu un mesaj de eroare
24、Modificare Request Body GatewayFilter Factory
Modifică conținutul original al corpului cererii înainte de a redirecționa cererea, fabrica filtrelor poate fi configurată doar prin cod, nu și prin fișierul de configurare. Exemplu de cod:
Sfaturi: Această fabrică de filtre este în stare BETA, iar API-ul s-ar putea schimba în viitor.Vă rugăm să folosiți mediul de producție cu prudență
25、Modifică corpul de răspuns Gateway Filter Factory
Fabrica de filtre poate fi folosită și pentru a modifica conținutul corpului de răspuns original, iar fabrica de filtre poate fi configurată doar prin cod, nu și în fișierul de configurare. Exemplu de cod:
Sfaturi: Această fabrică de filtre este în stare BETA, API-ul s-ar putea schimba în viitor, vă rugăm să o folosiți cu prudență în mediul de producție
26、Filtre implicite
Filtrele implicite sunt folosite pentru a adăuga o fabrică de filtre tuturor rutelor, adică pentru a treceFabrica filtrelor configurată de Filtrul Implicit se va aplica tuturor rutelor。 Exemplu de configurație:
(Sfârșit)
|