Fabbrica di filtri integrata
Ecco una tabella semplice di tutte le fabbriche di filtri integrate in Spring Cloud Gateway, che non è molto dettagliata, ma può essere usata come panoramica rapida. Come segue:
Fabbrica di filtri | funzione | parametro | AddRequestHeader | Aggiungi un Header alla richiesta originale | Nome e valore dell'intestazione | AddRequestParameter | Aggiungi parametri di richiesta alla richiesta originale | Nome e valore del parametro | AddResponseHeader | Aggiungi un'intestazione alla risposta originale | Nome e valore dell'intestazione | DedupeResponseHeader | Rifiuta i valori duplicati nell'intestazione della risposta | Il nome dell'intestazione e la strategia di deduplicazione che devono essere deduplicate | Hystrix | Introdurre la protezione degli interruttori automatici di Hystrix per il percorso | Il nome di HystrixCommand | Header di Riserva | Aggiungi informazioni specifiche di eccezione all'intestazione della richiesta dell'Uri di FallbackUri | Nome dell'intestazione | PrefixPath | Aggiungi un prefisso al percorso di richiesta originale | Percorso prefisso | PreserveHostHeader | Aggiungi una proprietà preserveHostHeader=true alla richiesta, che il filtro di routing controlla per decidere se vuoi inviare l'host originale | non | RequestRateLimiter | Utilizzato per limitare le richieste, l'algoritmo di throttling è un bucket di token | keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus | Reindirizzato | Reindirizza la richiesta originale all'URL specificato | Codice di stato HTTP e URL di reindirizzamento | RemoveHopByHopHeadersFilter | Rimuovere una serie di intestazioni prescritte dall'organizzazione IETF per la richiesta originale | Questo è abilitato di default e puoi specificare quali intestazioni eliminare tramite la configurazione | RemoveRequestHeader | Elimina un'intestazione per la richiesta originale | Nome dell'intestazione | RemoveResponseHeader | Rimuovere un'intestazione per la risposta originale | Nome dell'intestazione | Percorso di riscrittura | Riscrive il percorso di richiesta originale | Il regex originale del percorso e il regex del percorso riscritto | RewriteResponseHeader | Riscrivi un'intestazione nella risposta originale | Nome dell'intenatura, espressione regolare del valore, valore riscritto | SaveSession | Applica l'operazione WebSession::save prima di inoltrare la richiesta | non | Header secur | Aggiungi una serie di intestazioni di risposta che agiscono come sicurezza alla risposta originale | Nessuno, puoi modificare i valori di queste intestazioni di risposta di sicurezza | SetPath | Modifica il percorso di richiesta originale | Percorso modificato | SetResponseHeader | Modifica il valore di un'intestazione nella risposta originale | Nome dell'intenatura, il valore modificato | SetStatus | Modifica il codice di stato della risposta originale | Codici di stato HTTP, che possono essere numeri o stringhe | StripPrefisso | Usata per troncare il percorso della richiesta originale | Usa i numeri per indicare il numero di percorsi da troncare | Ripetere | Riprova per risposte diverse | retries、status、methods、series | RequestSize | Imposta la dimensione dei pacchetti richiesti al massimo che possono essere ricevuti. Se la dimensione del pacchetto richiede supera il valore impostato, viene restituito 413 Payload Too Large | La dimensione del pacchetto richiesta è in byte e il valore predefinito è 5M | ModificaRichiestaCorpo | Modifica il contenuto originale del corpo della richiesta prima di inoltrare la richiesta | Contenuto del corpo della richiesta modificato | ModificaRispostaCorpo | Modifica il contenuto del corpo originale della risposta | Il contenuto del corpo della risposta modificato | Default | Aggiungi filtri per tutte le rotte | Nome e valore della fabbrica del filtro |
Consigli: Ogni fabbrica di filtri corrisponde a una classe di implementazione, e questeIl nome della classe deve terminare con GatewayFilterFactoryQuesta è una convenzione di Spring Cloud Gateway, ad esempio, la classe di implementazione corrispondente a AddRequestHeader è AddRequestHeaderGatewayFilterFactory. Gli amici interessati al codice sorgente possono splicare nomi di classe specifici secondo questa regola per trovare il codice di implementazione di queste fabbriche di filtri integrate.
1、AddRequestHeader GatewayFilter Factory
Aggiungi un'intestazione alla richiesta originale, esempio di configurazione:
Aggiungi un'intestazione di richiesta chiamata X-Request-Foo con valore Bar alla richiesta originale
2、AddRequestParameter GatewayFilter Factory
Aggiungi parametri e valori della richiesta alla richiesta originale, esempio di configurazione:
Aggiungi un parametro chiamato foo con valore di bar alla richiesta originale, cioè: foo=bar
3、AddResponseHeader GatewayFilter Factory
Aggiungi un'intestazione alla risposta originale, esempio di configurazione:
Aggiungi un'intestazione di risposta chiamata X-Request-Foo con valore Bar alla risposta originale
4、DedupeResponseHeader GatewayFilter Factory
DedupeResponseHeader può rimuovere valori duplicati nelle intestazioni di risposta in base al nome dell'intestazione configurato e alla politica di deduplicazione, una nuova funzionalità fornita da Spring Cloud Greenwich SR2 e che non può essere utilizzata in questa versione.
NoiSe l'intestazione CORS (Solving Cross-Domain) è impostata sia sul Gateway che sul microservizio, se non viene effettuata alcuna configurazione, allora il valore dell'Intestazione CORS ottenuto richiedendo il microservizio -> Gateway ->, sarà così:
Puoi vedere che i valori di queste due intestazioni sono duplicati; se vuoi deduplicare i valori di queste due intestazioni, devi usare DedupeResponseHeader, esempio di configurazione:
Strategia di deduplicazione:
- RETAIN_FIRST: Default, mantenere il primo valore
- RETAIN_LAST: Tieni l'ultimo valore
- RETAIN_UNIQUE: Mantenere tutti i valori unici nell'ordine in cui sono apparsi per la prima volta
Se vuoi avere una comprensione più completa della factory dei filtri, è consigliato leggere il codice sorgente della fabbrica dei filtri, perché il codice sorgente contiene note dettagliate ed esempi, che sono migliori della documentazione ufficiale: org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory
5、Hystrix GatewayFilter Factory
Vi presentiamo la protezione contro gli interruttori automatici di Hystrix per i percorsi, esempio di configurazione:
Hystrix è la prima generazione di componenti tolleranti ai guasti di Spring Cloud, ma è entrato in modalità di manutenzione, e Hystrix sarà rimosso da Spring Cloud in futuro, sostituito da Alibaba Sentinel/Resilience4J. Quindi questo articolo non entrerà nei dettagli; se sei interessato, puoi consultare la documentazione ufficiale: Hystrix GatewayFilter Factory
6、FallbackHeaders GatewayFilter Factory
Supportando anche Hystrix, la fabbrica di filtri descritta nella sezione precedente supporta un parametro di configurazione: fallbackUri, che viene utilizzato per inoltrare le richieste a uno specifico URI quando si verifica un'eccezione. La fabbrica di filtri FallbackHeaders può aggiungere un'intestazione quando inoltra una richiesta all'URI, e il valore di questa intestazione è l'informazione specifica delle eccezioni. Esempio di configurazione:
Non entrerò nei dettagli qui, se sei interessato puoi consultare la documentazione ufficiale: FallbackHeaders GatewayFilter Factory
7、PrefixPath GatewayFilter Factory
Aggiungi un percorso prefisso al percorso di richiesta originale, esempio di configurazione:
Questa configurazione rende la visita a ${GATEWAY_URL}/hello inoltrata ahttps://example.org/mypath/hello
8、PreserveHostHeader GatewayFilter Factory
Aggiungi una proprietà preserveHostHeader=true alla richiesta, che il filtro di routing controlla per decidere se inviare l'Host Header originale. Esempio di configurazione:
Se non impostato, allora l'intestazione chiamata Host sarà controllata dal Client Http
9、ToolRateLimiter GatewayFilter Factory
Viene utilizzato per limitare le richieste, e l'algoritmo di throttling è un bucket di token. Esempio di configurazione:
10、Redirect To GatewayFilter Factory
Reindirizza la richiesta originale all'URL specificato, esempio di configurazione:
Questa configurazione rende l'accesso a ${GATEWAY_URL}/hello reindirizzato a https://acme.org/hello , e ne porti unoLocation:http://acme.orgHeader, mentre il codice di stato HTTP che restituisce il client è 302
Note:
Il codice di stato HTTP dovrebbe essere 3xx, ad esempio 301
L'URL deve essere un URL legittimo che funge da valore dell'Intestazione di Posizione
11、RemoveHopByHopHeadersFilter GatewayFilter Factory
Per la richiesta originale di rimuovere una serie di intestazioni specificate dall'organizzazione IETF, le intestazioni eliminate di default sono le seguenti:
- Connessione
- Mantenersi in vita
- Autenticazione tramite procura
- Autorizzazione per procura
- TE
- Rimorchio
- Codifica di trasferimento
- Aggiornamento
Puoi specificare quali intestazioni vengono eliminate solo tramite la configurazione, esempio di configurazione:
12、RemoveRequestHeader GatewayFilter Factory
Per rimuovere un'intestazione per la richiesta originale, configura un esempio:
Rimuovi l'intestazione della richiesta chiamata X-Request-Foo dalla richiesta originale
13、RemoveResponseHeader GatewayFilter Factory
Per rimuovere un'intestazione per la risposta originale, configura un esempio:
Rimuovi l'intestazione di risposta chiamata X-Request-Foo dalla risposta originale
14、RewritePath GatewayFilter Factory
Sovrascrivere il percorso di richiesta originale con un'espressione regolare, esempio di configurazione:
Questa configurazione consente di accedere a /foo/bar per riscrivere il percorso verso /bar e inoltrarlo, cioè inoltrarlo a https://example.org/bar。 Si noti che, a causa della sintassi YAML, è necessario usare $\ invece di $
15、RewriteResponseHeader GatewayFilter Factory
Riscrivi un'intestazione nella risposta originale, esempio di configurazione:
Il significato di questa configurazione è che se il valore di X-Response-Foo nell'intestazione di risposta è /42?user=ford&password=omg!what&flag=true, allora verrà riscritto in /42?user=ford&password=***&flag=true secondo il valore configurato, cioè la password=omg!cosa verrà riscritto in password=***
16、SaveSession GatewayFilter Factory
Prima di inoltrare la richiesta, applica l'operazione WebSession::save, esempio di configurazione:
Viene utilizzato principalmente per l'archiviazione differita dei dati (i dati non vengono conservati immediatamente) come Spring Session, e vuole garantire che lo stato della sessione venga salvato prima che la richiesta venga inoltrata. Se integri Spring Security, in Spring Session, e vuoi assicurarti che tutte le informazioni di sicurezza vengano trasmesse alle macchine a valle, devi configurare questo filtro.
17、secureHeaders GatewayFilter Factory
La fabbrica di filtri secureHeaders si basa principalmente sulle raccomandazioni di questo blog, aggiungendo una serie di header di risposta che svolgono un ruolo di sicurezza nella risposta originale. Per impostazione predefinita, vengono aggiunti i seguenti Header (inclusi i valori):
- 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
Se vuoi modificare i valori di queste Header, allora devi usare i suffissi corrispondenti di queste Header, come segue:
- Testa di protezione XSS
- Sicurezza dei trasporti rigorosi
- Opzioni di frame
- Opzioni di tipo di contenuto
- Politica dei referenti
- Politica-Sicurezza-dei Contenuti
- opzioni di download
- politiche cross-domain-permesse
Esempio di configurazione:
Se vuoi disabilitare alcune intestazioni, puoi usare la seguente configurazione:
18、SetPath GatewayFilter Factory
Modifica il percorso di richiesta originale e configura un esempio:
Questa configurazione lo rende inoltrato a ${GATEWAY_URL}/foo/bar quando si accedehttps://example.org/bar , cioè, il /foo/bar originale è stato cambiato in /bar
19、SetResponseHeader GatewayFilter Factory
Modifica il valore di un'intestazione nella risposta originale, configura un esempio:
Modifica il valore di X-Response-Foo nella risposta originale a Bar
20、SetStatus GatewayFilter Factory
Modifica il codice di stato della risposta originale, esempio di configurazione:
Il valore di SetStatusd può essere sia un numero che una stringa. Ma deve essere il valore nella classe di enumerazione Spring HttpStatus. Entrambe le configurazioni sopra elencate possono restituire il codice di stato HTTP 401.
21、StripPrefix GatewayFilter Factory
Per troncare il percorso della richiesta originale, esempio di configurazione:
Come mostrato nella configurazione sopra, se il percorso richiesto è /name/bar/foo, allora verrà troncato a /foo e inoltrato, cioè 2 percorsi verranno troncati.
22、Retry GatewayFilter Factory
Riprova per risposte diverse, ad esempio per codici di stato HTTP, esempio di configurazione:
I seguenti parametri possono essere configurati:
- Ritenti di ritento: Il numero di tentativi
- status: Il codice di stato che deve essere riprovato, impostato in org.springframework.http.HttpHttpStatus
- metodi: Il metodo di richiesta che deve essere riprovato, con un valore in org.springframework.http.HttpHttpMetodo
- serie di codice di stato HTTP, con un valore in org.springframework.http.Http.HttpStatus.Series
23、ToolSizeGatewayFilter Factory
Imposta la dimensione dei pacchetti di richiesta massimi consentiti da ricevere, esempio di configurazione:
Se la dimensione del pacchetto richiede supera il valore impostato, viene restituito un Payload 413 Too Large insieme a un messaggio di errore
24、Modifica Richiesta Corpo GatewayFilter Factory
Modifica il contenuto originale del corpo della richiesta prima di inoltrare la richiesta, la fabbrica del filtro può essere configurata solo tramite codice, non nel file di configurazione. Esempio di codice:
Consigli: questa fabbrica di filtri è in stato BETA e l'API potrebbe cambiare in futuro.Si prega di utilizzare l'ambiente produttivo con cautela
25、Modifica Response Body Gateway Filter Factory
La factory dei filtri può anche essere utilizzata per modificare il contenuto del corpo della risposta originale, e la factory dei filtri può essere configurata solo tramite codice, non nel file di configurazione. Esempio di codice:
Consigli: Questa fabbrica di filtri è in stato BETA, l'API potrebbe cambiare in futuro, per favore utilizzala con cautela nell'ambiente di produzione
26、Filtri predefiniti
I filtri predefiniti vengono usati per aggiungere una fabbrica di filtri a tutte le rotte, cioè per passareLa fabbrica di filtri configurata dal Filtro Predefinito si applicherà a tutte le rotte。 Esempio di configurazione:
(Fine)
|