Dahili filtre fabrikası
İşte Spring Cloud Gateway'e entegre edilmiş tüm filtre fabrikalarının basit bir tablosu; çok detaylı olmasa da hızlı bir genel bakış olarak kullanılabilir. Şöyle:
Filtre fabrikası | fonksiyon | parametre | AddRequestHeader | Orijinal isteğe bir Başlık ekle | Başlık adı ve değeri | AddRequestParameter | Orijinal isteğe istek parametreleri ekle | Parametre adı ve değeri | AddResponseHeader | Orijinal yanıta bir başlık ekleyin | Başlık adı ve değeri | DedupeResponseHeader | Yanıt başlığındaki tekrarlanan değerleri reddeder | Başlık adı ve deduplicate edilmesi gereken deduplication stratejisi | Hystrix | Güzergah için Hystrix'in devre kesici korumasını tanıtın | HystrixCommand'ın adı | Geri Dönüş Başlıkları | FallbackUri'nin istek başlığına özel istisna bilgisi ekleyin | Başlığın adı | PrefixPath | Orijinal istek yoluna bir preek ekle | önek yolu | PreserveHostHeader | Isteğe bir preserveHostHeader=true özelliği ekleyin; yönlendirme filtresi bunu kontrol ederek orijinal Host'u göndermek isteyip istemediğinize karar veriyor | değil | RequestRateLimiter | İstekleri kısıtlamak için kullanılan throttling algoritması bir token bucket'tır | keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus | YönlendirmeAdrese | Orijinal isteği belirtilen URL'ye yönlendirin | HTTP durum kodu ve yönlendirme URL'si | HopByHopHeadersFilter Kaldır | IETF organizasyonu tarafından orijinal talep için belirlenen bir dizi başlığı kaldırın | Bu varsayılan olarak etkinleştirilmiş ve yapılandırma üzerinden sadece hangi başlıkların silineceğini belirleyebilirsiniz | KaldırmaRequestHeader | Orijinal istek için bir başlığı sil | Başlık adı | KaldırCevapBaşlığı | Orijinal yanıt için bir başlığı kaldırın | Başlık adı | RewritePath | Orijinal istek yolunu yeniden yaz | Orijinal yol regexi ve yeniden yazılmış yolun regexi | RewriteResponseHeader | Orijinal yanıtta bir başlığı yeniden yaz | Başlık adı, değerin düzenli ifadesi, yeniden yazılmış değer | SaveSession | İstek iletmeden önce WebSession::save işlemini zorunlu kılın | değil | secureHeaders | Orijinal yanıta güvenlik görevi veren bir dizi yanıt başlığı ekleyin | Hayır, bu güvenlik yanıt başlıklarının değerlerini değiştirebilirsiniz | SetPath | Orijinal istek yolunu değiştirin | Değiştirilmiş yol | SetResponseHeader | Orijinal yanıttaki başlığın değerini değiştirin | Başlık adı, değiştirilmiş değer | SetStatus | Orijinal yanıtın durum kodunu değiştirin | HTTP durum kodları, bunlar sayılar veya dizler olabilir | StripPrefix | Orijinal talebin yolunu kısaltmak için kullanılır | Kısaltılması gereken yol sayısını belirtmek için sayılar kullanın | Yeni -den deneme | Farklı yanıtlar için tekrar denemeler | retries、statuses、methods、series | RequestSize | Alınmasına izin verilen maksimum talep edilen paketlerin boyutunu ayarlayın. İstek paketi boyutu ayarlanan değeri aşarsa, 413 Yük Çok Büyük döner. | İstek paketi boyutu bayt cinsindendir ve varsayılan değer 5M'dir | ModifyRequestBody | Isteği iletmeden önce orijinal istek gövdesi içeriğini değiştirin | Değiştirilmiş istek gövdesi içeriği | ModifyResponseBody | Orijinal yanıt gövdesinin içeriğini değiştirin | Değiştirilmiş yanıt gövdesi içeriği | Temerrüt | Tüm güzergahlar için filtreler ekle | Filtre fabrikası adı ve değeri |
İpuçları: Her filtre fabrikası bir uygulama sınıfına karşılık gelir ve bunlarSınıfın adı GatewayFilterFactory ile bitmelidirBu, Spring Cloud Gateway'in bir konvensiyasıdır; örneğin, AddRequestHeader'a karşılık gelen uygulama sınıfı AddRequestHeaderGatewayFilterFactory'dir. Kaynak koduyla ilgilenen arkadaşlar, bu kurala göre belirli sınıf adlarını birleştirerek bu yerleşik filtre fabrikalarının uygulama kodunu bulabilirler.
1、AddRequestHeader GatewayFilter Factory
Orijinal talebe bir başlık ekleyin, yapılandırma örneği:
Orijinal talebe Bar değeri olan X-Request-Foo adlı bir istek başlığı ekleyin
2、AddRequestParameter GatewayFilter Factory
Orijinal isteğe istek parametreleri ve değerleri ekleyin, yapılandırma örneği:
Orijinal talebe bar değeri olan foo adlı bir parametre ekleyin, örneğin: foo=bar
3、AddResponseHeader GatewayFilter Factory
Orijinal yanıta bir başlık ekleyin, yapılandırma örneği:
Orijinal yanıta Bar değeri olan X-Request-Foo adlı bir yanıt başlığı ekleyin
4、DedupeResponseHeader GatewayFilter Factory
DedupeResponseHeader, Spring Cloud Greenwich SR2 tarafından sağlanan ve bu sürümde kullanılamaz olan yapılandırılmış başlık adı ve deduplication politikasına bağlı olarak yanıt başlıklarındaki tekrarlanan değerleri kaldırabilir.
BizEğer CORS (Çözüm Alanları Arası) Başlığı hem Gateway hem de mikroserviste ayarlanmışsa, yapılandırma yapılmazsa, -> Gateway -> mikroservisinin istenmesiyle elde edilen CORS Başlığının değeri, şöyle olacak:
Bu iki Başlığın değerlerinin tekrarlandığını görebilirsiniz, bu iki Başlığın değerlerini deduplicate etmek istiyorsanız, DedupeResponseHeader (yapılandırma örneği) kullanmanız gerekir:
Deduplication Stratejisi:
- RETAIN_FIRST: Varsayılan olarak, ilk değeri korur
- RETAIN_LAST: Son değeri sakla
- RETAIN_UNIQUE: Tüm benzersiz değerleri ilk ortaya çıktıkları sırayla tutun
Filtre fabrikasını daha kapsamlı anlamak istiyorsanız, filtre fabrikasının kaynak kodunu okumanız önerilir; çünkü kaynak kodunda ayrıntılı notlar ve örnekler bulunur ve bu resmi dokümantasyondan daha iyidir: org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory
5、Hystrix GatewayFilter Factory
Hystrix'in rotalar için devre kesici korumasını tanıtıyorum, yapılandırma örneği:
Hystrix, Spring Cloud'un hata toleranslı bileşenlerinin ilk neslidir, ancak bakım moduna girmiştir ve Hystrix, gelecekte Spring Cloud tarafından kaldırılarak Alibaba Sentinel/Resilience4J ile değiştirilecektir. Bu makale detaylara girmeyecek, ilgileniyorsanız resmi dokümantasyona başvurabilirsiniz: Hystrix GatewayFilter Factory
6、FallbackHeaders GatewayFilter Factory
Ayrıca Hystrix'i destekleyen filtre fabrikası, önceki bölümde tanımlanan bir yapılandırma parametresi olan fallbackUri'yi destekler; bu parametre, istisna olduğunda istekleri belirli bir URI'ye iletmek için kullanılır. FallbackHeaders filtre fabrikası, bir isteği URI'ye iletirken bir başlık ekleyebilir ve bu başlığın değeri özel istisna bilgisidir. Konfigürasyon örneği:
Burada detaylara girmeyeceğim, ilgileniyorsanız resmi dokümantasyona bakabilirsiniz: FallbackHeaders GatewayFilter Factory
7、PrefixPath GatewayFilter Factory
Orijinal istek yoluna bir preek yolu ekleyin, yapılandırma örneği:
Bu yapılandırma, ${GATEWAY_URL}/hello ziyaretini şu adrese yönlendirir:https://example.org/mypath/hello
8、PreserveHostHeader GatewayFilter Factory
Yönlendirme filtresinin orijinal Host Başlığını gönderip göndermeyeceğine karar vermek için bunu kontrol ettiği bir preserveHostHeader=true özelliği eklesin. Konfigürasyon örneği:
Ayarlanmazsa, Host adlı başlık Http İstemcisi tarafından kontrol edilir
9、RequestRateLimiter GatewayFilter Factory
Talepleri kısıtlamak için kullanılır ve throttling algoritması bir token bucket'tır. Konfigürasyon örneği:
10、RedirectTo GatewayFilter Factory
Orijinal isteği belirtilen URL'ye yönlendirin, yapılandırma örneği:
Bu yapılandırma, ${GATEWAY_URL}/hello erişimini şu adrese yönlendiriyor https://acme.org/hello , ve bir tane taşırLocation:http://acme.orgBaşlık olarak kullanılırken, istemci döndüren HTTP durum kodu 302'dir
Notlar:
HTTP durum kodu 3xx olmalıdır, örneğin 301
URL, Konum Başlığının değeri olarak hizmet eden meşru bir URL olmalıdır
11、RemoveHopByHopHeadersFilter gatewayFilter Factory
IETF organizasyonu tarafından belirtilen bir dizi başlığı kaldırmak için orijinal talep için, varsayılan silinmiş başlıklar aşağıdaki gibidir:
- Bağlantı
- Hayatta Kalmak
- Proxy-Authenticate
- Proxy-Authorization
- TE
- Treyler
- Transfer-Kodlama
- Yükseltmek
Hangi başlıkların silindiğini sadece yapılandırma yoluyla belirtebilirsiniz, yapılandırma örneği:
12、RemoveRequestHeader GatewayFilter Factory
Orijinal istek için bir başlığı kaldırmak için bir örnek yapılandırın:
Orijinal istekten X-Request-Foo adlı istek başlığını kaldırın
13、RemoveResponseHeader GatewayFilter Factory
Orijinal yanıt için bir başlığı kaldırmak için bir örnek yapılandırın:
Orijinal yanıttan X-Request-Foo adlı yanıt başlığını kaldırın
14、RewritePath GatewayFilter Factory
Orijinal istek yolunu düzenli ifade ile geçersiz kılmak, yapılandırma örneği:
Bu yapılandırma, /foo/bar'a erişim sağlar ve /bar'a giden yolu yeniden yazabilir ve iletir, yani https://example.org/bar。 YAML sözdizimi nedeniyle $\ yerine $\ kullanılması gerektiğini unutmayın
15、RewriteResponseHeader GatewayFilter Factory
Orijinal yanıtta bir başlığı yeniden yaz, yapılandırma örneği:
Bu yapılandırmanın önemi, yanıt başlığındaki X-Response-Foo değeri /42?user=ford&password=omg!what&flag=true ise, yapılandırılmış değere göre /42?user=ford&password=***&flag=true olarak yeniden yazılır, yani password=omg!ne şifreye yeniden yazılır=***
16、SaveSession GatewayFilter Factory
İstek iletilmeden önce, WebSession::save işlemini zorunlu kılın, yapılandırma örneği:
Esas olarak Spring Session gibi ertelenmiş veri depolama için kullanılır (veri hemen kalıcı olmaz) ve istek iletilmeden önce oturum durumunun kaydedilmesini sağlamak ister. Spring Secutiry'yi Spring Session'a entegre ederseniz ve tüm güvenlik bilgilerinin aşağı akış makinelerine iletmesini istiyorsanız, bu filtreyi yapılandırmanız gerekir.
17、secureHeaders GatewayFilter Factory
secureHeaders filtre fabrikası esas olarak bu blogdaki önerilere dayanıyor ve orijinal yanıtta güvenlik rolü oynayan bir dizi yanıt başlığı ekliyor. Varsayılan olarak, aşağıdaki Başlıklar (değerler dahil) eklenir:
- 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
Bu Başlıkların değerlerini değiştirmek istiyorsanız, bu Başlıkların karşılık gelen eklerini aşağıdaki gibi kullanmanız gerekir:
- xss-koruma-başlığı
- katı taşıma-güvenlik
- Çerçeve seçenekleri
- içerik-tip-seçenekler
- Yönlendirici politikası
- içerik-güvenlik-politikası
- İndirme seçenekleri
- Permissionted-cross-domain-policies
Konfigürasyon örneği:
Bazı başlıkları devre dışı bırakmak isterseniz, aşağıdaki yapılandırmayı kullanabilirsiniz:
18、SetPath GatewayFilter Factory
Orijinal istek yolunu değiştirin ve bir örnek yapılandırın:
Bu yapılandırma, erişildiğinde ${GATEWAY_URL}/foo/bar adresine iletilmesini sağlarhttps://example.org/bar , yani orijinal /foo/bar /bar olarak değiştirildi
19、SetResponseHeader GatewayFilter Factory
Orijinal yanıttaki başlık değerini değiştirin, bir örnek yapılandırın:
Bar'a verilen orijinal yanıttaki X-Response-Foo değerini değiştirin
20、SetStatus GatewayFilter Factory
Orijinal yanıtın durum kodunu değiştirin, yapılandırma örneği:
SetStatusd'un değeri bir sayı veya bir dizi olabilir. Ama bu Spring HttpStatus enumeration sınıfındaki değer olmalı. Yukarıdaki her iki yapılandırma da HTTP durum kodu 401'i döndürebilir.
21、StripPrefix GatewayFilter Factory
Orijinal isteğin yolunu kesmek için yapılandırma örneği:
Yukarıdaki yapılandırmada gösterildiği gibi, istenen yol /name/bar/foo ise, yol /foo'ya kısaltır ve iletir, yani 2 yol kısılır.
22、Retry GatewayFilter Factory
Farklı yanıtlar için tekrar deneme, örneğin HTTP durum kodları için, yapılandırma örneği:
Aşağıdaki parametreler yapılandırılabilir:
- denemeler: Deneme sayısı
- statuses: Yeniden denenmesi gereken durum kodu, org.springframework.http.HttpStatus içinde ayarlanmıştır
- metodlar: Tekrar denenmesi gereken istek yöntemi, org.springframework.http.HttpMethod içinde bir değer olan
- series:HTTP durum kodu dizisi, org.springframework.http.HttpStatus.Series içinde bir değer ile
23、RequestSize GatewayFilter Factory
Alınabilecek maksimum istek paketlerinin boyutunu ayarlayın, yapılandırma örneği:
Eğer istek paketi boyutu ayarlanmış değeri aşarsa, 413 Payload Too Large ve bir errorMessage döner.
24、Modify Request Body GatewayFilter Factory
Isteği iletmeden önce orijinal istek gövdesi içeriğini değiştirin, filtre fabrikası yalnızca kod ile yapılandırılabilir, yapılandırma dosyasında değil. Kod örneği:
İpuçları: Bu filtre fabrikası BETA durumunda ve API gelecekte değişebilir.Lütfen üretim ortamını dikkatli kullanın
25、Response Body GatewayFilter Factory Değiştir
Filtre fabrikası ayrıca orijinal yanıt gövdesinin içeriğini değiştirmek için kullanılabilir ve filtre fabrikası yalnızca kod ile yapılandırılabilir, yapılandırma dosyasında değil. Kod örneği:
İpuçları: Bu filtre fabrikası BETA durumunda, API gelecekte değişebilir, lütfen üretim ortamında dikkatli kullanın
26、Default Filters
Varsayılan Filtreler, tüm rotalara filtre fabrikası eklemek için kullanılır, yani geçmek içinVarsayılan Filtre tarafından yapılandırılan filtre fabrikası tüm rotalar için geçerli olacaktır。 Konfigürasyon örneği:
(Son)
|