Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 9128|Yanıt: 0

[Kaynak] Spring Cloud Gateway'e entegre edilmiş filtre fabrikaları

[Bağlantıyı kopyala]
Yayınlandı 7.02.2022 13:36:49 | | |
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:


Access-Control-Allow-Credentials: true, true
Access-Control-Allow-Origin: https://musk.mars, https://musk.mars
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)




Önceki:Docker logları diskleri doldurur ve veri taşını
Önümüzdeki:Java dinamik spliced SQL statements prevent database injection
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com