Aracılığıyla paylaş


Azure Spring Apps Kurumsal planıyla VMware Spring Cloud Gateway yol filtrelerini kullanma

Not

Azure Spring Apps, Azure Spring Cloud hizmetinin yeni adıdır. Hizmetin yeni bir adı olsa da, ekran görüntüleri, videolar ve diyagramlar gibi varlıkları güncelleştirmek için çalışırken bazı yerlerde eski adı bir süre görürsünüz.

Bu makale şunlar için geçerlidir:❌ Temel/Standart ✔️ Kurumsal

Bu makalede, istekleri uygulamalarınıza yönlendirmek için Azure Spring Apps Enterprise planıyla VMware Spring Cloud Gateway yol filtrelerinin nasıl kullanılacağı açıklanmaktadır.

VMware Spring Cloud Gateway, açık kaynak Spring Cloud Gateway projesini temel alan ticari bir VMware Tanzu bileşenidir. Spring Cloud Gateway, API geliştirme ekipleri için çoklu oturum açma (SSO), erişim denetimi, hız sınırlama, dayanıklılık, güvenlik ve daha fazlası gibi çapraz sorunlarla ilgilenir. Modern bulut yerel desenlerini ve API geliştirme için seçtiğiniz herhangi bir programlama dilini kullanarak API teslimini hızlandırabilirsiniz.

VMware Spring Cloud Gateway aşağıdaki özellikleri içerir:

  • Dinamik yönlendirme yapılandırması, yeniden derleme olmadan uygulanabilen ve değiştirilebilen tek tek uygulamalardan bağımsızdır.
  • Yetkili JSON Web Belirteci (JWT) talebi uygulama hizmetlerine taşımak için ticari API yol filtreleri.
  • İstemci sertifikası yetkilendirmesi.
  • Hız sınırlama yaklaşımları.
  • Devre kesici yapılandırması.
  • HTTP Temel Kimlik Doğrulaması kimlik bilgileri aracılığıyla uygulama hizmetlerine erişim desteği.

VMware Tanzu için API Portalı ile tümleştirmek üzere VMware Spring Cloud Gateway, tüm yol yapılandırma eklemeleri veya değişikliklerden sonra otomatik olarak OpenAPI sürüm 3 belgeleri oluşturur. Daha fazla bilgi için bkz . VMware Tanzu için API Portalını kullanma.

Önkoşullar

  • Spring Cloud Gateway'in etkinleştirildiği, önceden sağlanmış bir Azure Spring Apps Kurumsal planı hizmet örneği. Daha fazla bilgi için bkz . Hızlı Başlangıç: Kurumsal planı kullanarak uygulamaları derleme ve Azure Spring Apps'e dağıtma.
  • Azure CLI sürüm 2.0.67 veya üzeri. Azure Spring Apps uzantısını yüklemek için aşağıdaki komutu kullanın: az extension add --name spring.

Filtreleri kullanma

Spring Cloud Gateway yapılandırmanızda filtreleri kullanarak gelen istek veya bir yol yapılandırmasına giden yanıt üzerinde işlem yapabilirsiniz.

Örneğin, http üst bilgisi eklemek veya yetkilendirme belirtecine göre erişimi reddetmek için filtre kullanabilirsiniz.

açık kaynak filtreleri kullanma

Spring Cloud Gateway OSS, rotalar için filtre oluşturmak için kullanılan birkaç GatewayFilter fabrika içerir. Aşağıdaki bölümlerde bu fabrikalar açıklanmaktadır.

AddRequestHeader

Fabrika, AddRequestHeader tüm eşleşen istekler için aşağı akış isteğinin üst bilgilerine bir üst bilgi ekler.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • name
  • value

Aşağıdaki örnek, tüm eşleşen istekler için aşağı akış isteğinin üst bilgilerine üst bilgi X-Request-red:blue ekleyen bir AddRequestHeader fabrika yapılandırır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestHeader=X-Request-red, blue"
        ]
    }
]

Fabrikanın AddRequestHeader bir yol veya konakla eşleştirmek için kullanılan URI değişkenlerine erişimi vardır. Değerde URI değişkenlerini kullanabilirsiniz ve değişkenler çalışma zamanında genişletilir.

Aşağıdaki örnekte değişken kullanan bir AddRequestHeader fabrika yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddRequestHeader=X-Request-red, blue-{segment}"
        ]
    }
]

AddRequestHeadersIfNotPresent

Fabrika, AddRequestHeadersIfNotPresent özgün istekte yoksa üst bilgileri ekler.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • headers: Anahtar-değer çiftlerinin virgülle ayrılmış listesi (üst bilgi adı, üst bilgi değeri).

Aşağıdaki örnekte fabrika AddRequestHeadersIfNotPresent yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
        ]
    }
]

AddRequestParameter

Fabrika, AddRequestParameter tüm eşleşen istekler için aşağı akış isteğinin sorgu dizesine bir parametre ekler.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • name
  • value

Aşağıdaki örnek, tüm eşleşen istekler için aşağı akış isteğinin sorgu dizesine parametre ekleyen bir AddRequestParameterred=blue fabrika yapılandırır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestParameter=red, blue"
        ]
    }
]

Fabrikanın AddRequestParameter bir yol veya konakla eşleştirmek için kullanılan URI değişkenlerine erişimi vardır. Değerde URI değişkenlerini kullanabilirsiniz ve değişkenler çalışma zamanında genişletilir.

Aşağıdaki örnekte değişken kullanan bir AddRequestParameter fabrika yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddRequestParameter=foo, bar-{segment}"
        ]
    }
]

AddResponseHeader

Fabrika, AddResponseHeader tüm eşleşen istekler için aşağı akış yanıtının üst bilgilerine bir üst bilgi ekler.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • name
  • value

Aşağıdaki örnek, tüm eşleşen istekler için aşağı akış yanıtının üst bilgilerine üst bilgi ekleyen bir AddResponseHeaderX-Response-Red:Blue fabrika yapılandırır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddResponseHeader=X-Response-Red, Blue"
        ]
    }
]

Fabrikanın AddResponseHeader bir yol veya konakla eşleştirmek için kullanılan URI değişkenlerine erişimi vardır. Değerde URI değişkenlerini kullanabilirsiniz ve değişkenler çalışma zamanında genişletilir.

Aşağıdaki örnekte değişken kullanan bir AddResponseHeader fabrika yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddResponseHeader=foo, bar-{segment}"
        ]
    }
]

CircuitBreaker

Fabrika CircuitBreaker , yolları bir devre kesiciye sarmalar.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • name: Devre kesici adı.
  • fallbackUri: Yerel yol veya dış işleyici olabilecek yeniden yönlendirme URI'si.
  • status codes (isteğe bağlı): Sayı veya metin biçiminde eşleşecek durum kodlarının iki nokta üst üste ayrılmış listesi.
  • failure rate (isteğe bağlı): Devre kesicinin açıldığı eşik. Varsayılan değer %50'dir.
  • duration (isteğe bağlı): Yeniden kapatmadan önce bekleme süresi. Varsayılan değer 60 saniyedir.

Aşağıdaki örnekte fabrika CircuitBreaker yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
        ]
    }
]

DeDupeResponseHeader

Fabrika, DeDupeResponseHeader yanıt üst bilgilerinin yinelenen değerlerini kaldırır.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • name: Üst bilgi adlarının boşlukla ayrılmış listesi.
  • strategy(isteğe bağlı): Kabul edilen değerler , RETAIN_LASTve RETAIN_UNIQUEşeklindedirRETAIN_FIRST. Varsayılan değer şudur: RETAIN_FIRST.

Aşağıdaki örnek, her iki değer Access-Control-Allow-Credentials de ağ geçidi CORS mantığı ve Access-Control-Allow-Origin aşağı akış mantığı tarafından eklendiğinde yinelenen ve yanıt üst bilgilerini kaldıran bir DeDupeResponseHeader fabrika yapılandırır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "DeDupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin"
        ]
    }
]

FallbackHeaders

Fabrika, FallbackHeaders üst bilgisine devre kesici özel durumu ekler. Bu filtre, filtrenin CircuitBreaker başka bir yolda kullanılmasını gerektirir.

Bu fabrika için parametre yok.

Aşağıdaki örnek özel durum türü, ileti ve (varsa) kök neden özel durum türü ve filtrenin FallbackHeaders isteğe eklediği ileti ile bir FallbackHeaders fabrika yapılandırmaktadır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
        ]
    },
    {
        "predicates": [
            "Path=/inCaseOfFailureUseThis"
        ],
        "filters": [
            "FallbackHeaders"
        ]
    }
]

Aşağıdaki parametrelerin değerlerini ayarlayarak yapılandırmadaki üst bilgilerin adlarının üzerine yazabilirsiniz (varsayılan değerleriyle belirtilir):

  • executionExceptionTypeHeaderName ("Execution-Exception-Type")
  • executionExceptionMessageHeaderName ("Yürütme-Özel Durum-İletisi")
  • rootCauseExceptionTypeHeaderName ("Kök-Neden-Özel Durum-Türü")
  • rootCauseExceptionMessageHeaderName ("Kök-Neden-Özel Durum-İletisi")

JSONToGRPC

Fabrika, JSONToGRPCFilter bir JSON yükünü gRPC isteğine dönüştürür.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • protoDescriptor: Proto tanımlayıcı dosyası.

Aşağıdaki örnekte gösterildiği gibi bayrağını --descriptor_set_out kullanarak protoc ve belirterek bu dosyayı oluşturabilirsiniz:

protoc --proto_path=src/main/resources/proto/ \
    --descriptor_set_out=src/main/resources/proto/hello.pb \
    src/main/resources/proto/hello.proto

Not

streaming parametresi desteklenmez.

Aşağıdaki örnek, çıkışını protockullanarak bir JSONToGRPCFilter fabrika yapılandırır:

[
    {
        "predicates": [
            "Path=/json/**"
        ],
        "filters": [
            "JsonToGrpc=file:proto/hello.pb,file:proto/hello.proto,HelloService,hello"
        ]
    }
]

LocalResponseCache

Fabrika, LocalResponseCache genel önbellek etkinleştirildiğinde belirli yollar için yerel yanıt önbelleği yapılandırmasını geçersiz kılar.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • size: Önbellek çıkarma başlamadan önce bu yol için önbellek girdilerinin izin verilen en büyük boyutu (KB, MB ve GB cinsinden).
  • timeToLive: Süre dolmadan önce önbellek girişinin izin verilen kullanım ömrü. Saniyeler, m dakikalar veya h saatler için süre sonekini s kullanın.

Aşağıdaki örnekte fabrika LocalResponseCache yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "LocalResponseCache=3m,1MB"
        ]
    }
]

MapRequestHeader

Fabrika, MapRequestHeader gelen HTTP isteğinin üst bilgisinden güncelleştirilmiş değerlerle aşağı akış isteğine bir üst bilgi ekler.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • fromHeader
  • toHeader

Bu fabrika yeni bir adlandırılmış üst bilgi ()toHeader oluşturur ve değer gelen HTTP isteğinden var olan adlandırılmış üst bilgiden (fromHeader) ayıklanır. Giriş üst bilgisi yoksa, filtrenin hiçbir etkisi olmaz. Yeni adlandırılmış üst bilgi zaten varsa, değerleri yeni değerlerle genişletilir.

Aşağıdaki örnek, üst bilgiyi gelen HTTP isteğinin X-Request-Red:<values> üst bilgisinden güncelleştirilmiş değerlerle aşağı akış isteğine Blue ekleyen bir MapRequestHeader fabrika yapılandırır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "MapRequestHeader=Blue, X-Request-Red"
        ]
    }
]

PrefixPath

Fabrika, PrefixPath tüm isteklerin yoluna bir ön ek ekler.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • prefix

Aşağıdaki örnek, tüm isteklerin yoluna ön ek /api ekleyen bir PrefixPath fabrika yapılandırarak adresine bir istek gönderilmesini /catalog/api/catalogsağlar:

[
    {
        "predicates": [
            "Path=/catalog/**"
        ],
        "filters": [
            "PrefixPath=/api"
        ]
    }
]

PreserveHostHeader

Fabrika, PreserveHostHeader özgün ana bilgisayar üst bilgisinin mi yoksa HTTP istemcisi tarafından belirlenen ana bilgisayar üst bilgisinin mi gönderileceğini belirlemek için yönlendirme filtresinin incelediği bir istek özniteliği ayarlar.

Bu fabrika için parametre yok.

Aşağıdaki örnekte fabrika PreserveHostHeader yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "PreserveHostHeader"
        ]
    }
]

RedirectTo

Fabrika, RedirectTo özgün URL'ye bir yeniden yönlendirme ekler.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • status: 300 serisi http kodunu yeniden yönlendirir, örneğin 301.
  • url: Üst bilginin değeri Location . Geçerli bir URI olmalıdır. Göreli yeniden yönlendirmeler için rota tanımınızın URI'sini kullanmanız uri: no://op gerekir.

Aşağıdaki örnek, yeniden yönlendirme gerçekleştirmek için üst bilgi içeren bir Location:https://acme.org durum 302 gönderen bir fabrikayı yapılandırıyorRedirectTo:

[
    {
        "uri": "https://example.org",
        "filters": [
            "RedirectTo=302, https://acme.org"
        ]
    }
]

RemoveJsonAttributesResponseBody

Fabrika JSON RemoveJsonAttributesResponseBody özniteliklerini ve değerlerini JSON yanıt gövdelerinden kaldırır.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • attribute names: JSON yanıtından kaldırılacak öznitelik adlarının virgülle ayrılmış listesi.
  • delete recursively (isteğe bağlı, boole): Öznitelikleri yalnızca kök düzeyinde (false) veya özyinelemeli olarak (true) kaldıran bir yapılandırmadır. Varsayılan değer şudur: false.

Aşağıdaki örnekte fabrika RemoveJsonAttributesResponseBody yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveJsonAttributesResponseBody=origin,foo,true"
        ]
    }
]

RemoveRequestHeader

Fabrika, RemoveRequestHeader aşağı akış isteğinden bir üst bilgi kaldırır.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • name: Kaldırılacak üst bilginin adı.

Aşağıdaki listede, alt akış gönderilmeden önce üst bilgiyi kaldıran X-Request-Foo bir RemoveRequestHeader fabrika yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveRequestHeader=X-Request-Foo"
        ]
    }
]

RemoveRequestParameter

Fabrika, RemoveRequestParameter aşağı akış gönderilmeden önce bir parametreyi kaldırır.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • name: Kaldırılacak sorgu parametresinin adı.

Aşağıdaki örnek, aşağı akış gönderilmeden önce parametresini red kaldıran bir RemoveRequestParameter fabrika yapılandırır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveRequestParameter=red"
        ]
    }
]

RemoveResponseHeader

Fabrika, RemoveResponseHeader ağ geçidi istemcisine döndürülmeden önce yanıttan bir üst bilgi kaldırır.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • name: Kaldırılacak üst bilginin adı.

Aşağıdaki listede, ağ geçidi istemcisine X-Response-Foo döndürülmeden önce yanıttan üst bilgiyi kaldıran bir RemoveResponseHeader fabrika yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveResponseHeader=X-Response-Foo"
        ]
    }
]

RequestHeaderSize

fabrika RequestHeaderSize , istek üst bilgisinin boyutunu belirler.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • maxSize: anahtar ve değer de dahil olmak üzere istek üst bilgisinin izin verdiği maksimum veri boyutu.
  • errorHeaderName: Hata iletisi içeren yanıt üst bilgisinin adı. Varsayılan olarak, yanıt üst bilgisinin adı şeklindedir errorMessage.

Aşağıdaki listede, herhangi bir istek üst bilgisinin boyutu 1000 bayttan büyükse durum 431 gönderen bir RequestHeaderSize fabrika yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RequestHeaderSize=1000B"
        ]
    }
]

RewriteLocationResponseHeader

Fabrika RewriteLocationResponseHeader , genellikle arka uca özgü ayrıntılardan kurtulmak için yanıt üst bilgisinin değerini Location değiştirir.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • stripVersionMode: Bu parametre aşağıdaki olası değerlere sahiptir: NEVER_STRIP, AS_IN_REQUESTve ALWAYS_STRIP. Varsayılan değer şudur: AS_IN_REQUEST.

    • NEVER_STRIP: Özgün istek yolu sürüm içermese bile sürüm kaldırılamaz.
    • AS_IN_REQUEST: Sürüm yalnızca özgün istek yolu sürüm içermiyorsa çıkarılır.
    • ALWAYS_STRIP: Özgün istek yolu sürüm içerse bile sürüm her zaman kaldırılır.
  • hostValue: Bu parametre, sağlandığında yanıt Location üst bilgisinin host:port bölümünü değiştirmek için kullanılır. Sağlanmadıysa, istek üst bilgisinin Host değeri kullanılır.

  • protocolsRegex: Protokol adının eşleştirildiği geçerli bir regex String. Eşleştirilmezse, filtre çalışmaz. Varsayılan değer şudur: http|https|ftp|ftps.

  • locationHeaderName

Aşağıdaki listede fabrika RewriteLocationResponseHeader yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteLocationResponseHeader=AS_IN_REQUEST, Location, ,"
        ]
    }
]

Bu örnekte, bir istek değeri POSTapi.example.com/some/object/nameLocation için yanıt üst bilgisi değeri object-service.prod.example.net/v2/some/object/id olarak api.example.com/some/object/idyeniden yazılır.

Yeniden YazmaYolu

Fabrika, RewritePath istek yolunu yeniden yazmak için esnek bir yol için Java normal ifadelerini kullanır.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • regexp
  • replacement

Aşağıdaki listede fabrika RewritePath yapılandırılır:

[
    {
        "predicates": [
            "Path=/red/**"
        ],
        "filters": [
            "RewritePath=/red/?(?<segment>.*), /$\\{segment}"
        ]
    }
]

Bu örnekte, bir istek yolu /red/blueiçin, bu yapılandırma aşağı akış isteği yapmadan önce yolunu /blue olarak ayarlar.

RewriteResponseHeader

Fabrika, RewriteResponseHeader yanıt üst bilgisi değerini yeniden yazmak için esnek bir yol için Java normal ifadelerini kullanır.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • name
  • regexp
  • replacement

Aşağıdaki örnekte fabrika RewriteResponseHeader yapılandırılır:

[
    {
        "predicates": [
            "Path=/red/**"
        ],
        "filters": [
            "RewriteResponseHeader=X-Response-Red, , password=[^&]+, password=***"
        ]
    }
]

Bu örnekte, üst bilgi değeri /42?user=ford&password=omg!what&flag=trueiçin, aşağı akış isteğinde bulunıldıktan sonra yapılandırma olarak /42?user=ford&password=***&flag=true ayarlanır.

SetPath

Fabrika, SetPath yolun şablonlu kesimlerine izin vererek istek yolunu işlemek için basit bir yol sunar. Bu filtre Spring Framework'teki URI şablonlarını kullanır ve birden çok eşleşen kesime izin verir.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • template

Aşağıdaki örnekte fabrika SetPath yapılandırılır:

[
    {
        "predicates": [
            "Path=/red/{segment}"
        ],
        "filters": [
            "SetPath=/{segment}"
        ]
    }
]

Bu örnekte, bir istek yolu /red/blueiçin, bu yapılandırma aşağı akış isteği yapmadan önce yolunu /blue olarak ayarlar.

SetRequestHeader

Fabrika, SetRequestHeader tüm üst bilgileri belirtilen adla değiştirir (eklemek yerine).

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • name
  • value

Aşağıdaki listede fabrika SetRequestHeader yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "SetRequestHeader=X-Request-Red, Blue"
        ]
    }
]

Bu örnekte aşağı akış sunucusu ile X-Request-Red:1234yanıt verdi ve yerine ile değiştirildi X-Request-Red:Blue.

Fabrikanın SetRequestHeader bir yol veya konakla eşleştirmek için kullanılan URI değişkenlerine erişimi vardır. Değerde URI değişkenlerini kullanabilirsiniz ve değişkenler çalışma zamanında genişletilir.

Aşağıdaki örnekte değişken kullanan bir SetRequestHeader fabrika yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "SetRequestHeader=foo, bar-{segment}"
        ]
    }
]

SetResponseHeader

Fabrika, SetResponseHeader tüm üst bilgileri belirtilen adla değiştirir (eklemek yerine).

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • name
  • value

Aşağıdaki listede fabrika SetResponseHeader yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "SetResponseHeader=X-Response-Red, Blue"
        ]
    }
]

Bu örnekte aşağı akış sunucusu ile X-Response-Red:1234yanıt verdi ve yerine ile değiştirildi X-Response-Red:Blue.

Fabrikanın SetResponseHeader bir yol veya konakla eşleştirmek için kullanılan URI değişkenlerine erişimi vardır. Değerde URI değişkenlerini kullanabilirsiniz ve değişkenler çalışma zamanında genişletilir.

Aşağıdaki örnekte değişken kullanan bir SetResponseHeader fabrika yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "SetResponseHeader=foo, bar-{segment}"
        ]
    }
]

Setstatus

Fabrika, SetStatus sunucu isteğinin yanıt durumunu yapılandırıyor.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • status: gibi bir tamsayı değeri veya gibi sabit listesi NOT_FOUNDdize gösterimini oluşturabilen geçerli bir Spring HttpStatus değeri404.

Aşağıdaki listede fabrika SetStatus yapılandırılır:

[
    {
        "predicates": [
            "Path=/experimental/**"
        ],
        "filters": [
            "SetStatus=UNAUTHORIZED"
        ]
    },
    {
        "predicates": [
            "Path=/unknown/**"
        ],
        "filters": [
            "SetStatus=401"
        ]
    }
]

StripPrefix

Fabrika, StripPrefix istekten ön eki aşağı akış göndermeden önce kaldırır.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • parts: aşağı akış göndermeden önce istekten çıkarılası yoldaki parça sayısı. Varsayılan değer 1 şeklindedir.

Aşağıdaki örnekte fabrika StripPrefix yapılandırılır:

[
    {
        "predicates": [
            "Path=/name/**"
        ],
        "filters": [
            "StripPrefix=2"
        ]
    }
]

Bu örnekte ağ geçidi üzerinden adresine /name/blue/redbir istek yapılır. için yapılan nameservice istek olarak nameservice/redgörünür.

Yeniden dene

Fabrika Retry , denenen yeniden deneme sayısını belirler.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • retries: Denenmesi gereken yeniden deneme sayısı.
  • statuses: kullanılarak org.springframework.http.HttpStatustemsil edilen, yeniden denenmesi gereken HTTP durum kodları.
  • methods: kullanılarak org.springframework.http.HttpMethodtemsil edilen, yeniden denenmesi gereken HTTP yöntemleri.
  • series: kullanılarak org.springframework.http.HttpStatus.Seriestemsil edilen, yeniden denenecek durum kodları serisi.
  • exceptions: Yeniden denenmesi gereken oluşturulan özel durumların listesi.
  • backoff: Yeniden denemeler için yapılandırılan üstel geri alma. Yeniden denemeler, yinelemenin olduğu n geri alma aralığından firstBackoff * (factor ^ n)sonra gerçekleştirilir. Yapılandırılırsa maxBackoff , uygulanan maksimum geri alma işlemi ile maxBackoffsınırlıdır. true ise basedOnPreviousValue , backoff kullanılarak hesaplanır prevBackoff * factor.

Etkinleştirildiğinde filtre için Retry aşağıdaki varsayılanlar yapılandırılır:

  • retries: üç kez.
  • series: 5XX serisi.
  • methods: GET yöntemi.
  • exceptions: IOException ve TimeoutException.
  • backoff:Devre dışı.

Aşağıdaki örnekte fabrika Retry yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Retry=3,INTERNAL_SERVER_ERROR,GET,10ms,50ms,2,false"
        ]
    }
]

İstek Boyutu

fabrika, RequestSize istek boyutu izin verilen sınırdan büyük olduğunda bir isteğin aşağı akış hizmetine ulaşmasını kısıtlayabilir.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • maxSizeDataSize: Değerlerin sayı olarak tanımlandığı ve ardından veya MBgibi KB isteğe bağlı DataUnit bir sonek eklendiği bir tür. Varsayılan sonek değeri bayt içindir B . İsteğin bayt cinsinden tanımlanan izin verilen boyut sınırıdır.

Aşağıdaki örnekte fabrika RequestSize yapılandırılır:

[
    {
        "predicates": [
            "Path=/upload"
        ],
        "filters": [
            "RequestSize=5000000"
        ]
    }
]

Bu örnekte, istek boyut nedeniyle reddedildiğinde fabrika yanıt RequestSize durumunu 413 Payload Too Large başka bir üst bilgiyle errorMessageolarak ayarlar.

Aşağıdaki örnekte bir gösterilmektedir errorMessage:

errorMessage : Request size is larger than permissible limit. Request size is 6.0 MB where permissible limit is 5.0 MB

TokenRelay

Fabrika, TokenRelay aşağı akış kaynaklarına bir OAuth2 erişim belirteci iletir. Bu filtre, açık bir boolean filtre yerine yol tanımında bir değer olarak yapılandırılır.

Aşağıdaki örnekte fabrika TokenRelay yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "tokenRelay": true
    }
]

Ticari filtreleri kullanma

Kubernetes için Spring Cloud Gateway birçok özel GatewayFilter fabrika da sağlar. Aşağıdaki bölümlerde bu fabrikalar açıklanmaktadır.

AllowedRequestCookieCount

Fabrika, AllowedRequestCookieCount tanımlama bilgileri sayısına bağlı olarak eşleşen bir isteğin devam etme izni olup olmadığını belirler.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • amount: İzin verilen tanımlama bilgilerinin sayısı.

Aşağıdaki örnekte fabrika AllowedRequestCookieCount yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestCookieCount=2"
        ]
    }
]

AllowedRequestHeadersCount

Fabrika, AllowedRequestHeadersCount üst bilgi sayısına göre eşleşen bir isteğin devam etme izni olup olmadığını belirler.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • amount: İzin verilen üst bilgi sayısı.

Aşağıdaki örnekte fabrika AllowedRequestHeadersCount yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestHeadersCount=4"
        ]
    }
]

AllowedRequestQueryParamsCount

Fabrika, AllowedRequestQueryParamsCount sayı sorgusu parametrelerine göre eşleşen bir isteğin devam etme izni olup olmadığını belirler.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • amount: İzin verilen parametre sayısı.

Aşağıdaki örnekte fabrika AllowedRequestQueryParamsCount yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestQueryParamsCount=3"
        ]
    }
]

Basicauth

Fabrika isteklere BasicAuth bir BasicAuthAuthorization üst bilgi ekler.

Bu fabrika için parametre yok.

Aşağıdaki örnekte fabrika BasicAuth yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "BasicAuth"
        ]
    }
]

ClaimHeader

Fabrika, ClaimHeader bir JWT talebindeki verileri HTTP üst bilgisine kopyalar.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • Claim name: Geçecek talebin büyük/küçük harfe duyarlı adı.
  • Header name: HTTP üst bilgisinin adı.

Aşağıdaki örnekte fabrika ClaimHeader yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "ClaimHeader=sub,X-Claim-Sub"
        ]
    }
]

ClientCertificateHeader

Fabrika üst ClientCertificateHeader bilgi sertifikasını X-Forwarded-Client-Cert doğrular.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • domain patternX-Forwarded-Client-Cert: Kubernetes'in istemci sertifikasının CA'sını tanıma yeteneğine göre değer.
  • certificate fingerprint(isteğe bağlı): TLS/SSL sertifikası parmak izi.

Aşağıdaki örnekte fabrika ClientCertificateHeader yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "ClientCertificateHeader=*.example.com,sha-1:aa:bb:00:99"
        ]
    }
]

Cors

Fabrika, Cors cors doğrulamalarını bir rotada etkinleştirir.

Bu fabrika, CORS seçenekleri için anahtar-değer çiftleri olarak düzenlenmiş aşağıdaki yapılandırma parametrelerini kabul eder:

  • allowedOrigins
  • allowedMethods
  • allowedHeaders
  • maxAge
  • allowCredentials
  • allowedOriginPatterns

Aşağıdaki örnekte fabrika Cors yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Cors=[allowedOrigins:https://origin-1,allowedMethods:GET;POST;DELETE,allowedHeaders:*,maxAge:400,allowCredentials:true,allowedOriginPatterns:https://*.test.com:8080]"
        ]
    }
]

JsonToXml

Fabrika, JsonToXml JSON yanıt gövdesini XML yanıt gövdesine dönüştürür.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • wrapper: Geçerli XML oluşturmak için başka bir kök etiket gerekiyorsa XML yanıtının kök etiket adı. Varsayılan değer şudur: response.

Aşağıdaki örnekte fabrika JsonToXml yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "JsonToXml=custom-response"
        ]
    }
]

RateLimit

Fabrika, RateLimit istek hacmine göre eşleşen bir isteğin devam etme izni olup olmadığını belirler.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • request limit: Pencere sırasında kabul edilen en fazla istek sayısı.
  • window duration: Milisaniye cinsinden pencere süresi. Alternatif olarak, süreyi saniye, dakika veya saat cinsinden belirtmek için , m veya h soneklerini kullanabilirsinizs.
  • partition source (isteğe bağlı): Bölüm anahtarının (claim, headerveya IPs) konumu.
  • partition key (isteğe bağlı): İstek sayaçlarını bölümlendirmek için kullanılan değer.

Aşağıdaki örnekte fabrika RateLimit yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RateLimit=1,10s"
        ]
    }
]

Aşağıdaki örneklerde diğer RateLimit yapılandırmalar gösterilmektedir:

RateLimit=1,10s
RateLimit=1,10s,{claim:client_id}
RateLimit=1,10s,{header:client_id}
RateLimit=2,10s,{IPs:2;127.0.0.1;192.168.0.1}

RestrictRequestHeaders

Fabrika, RestrictRequestHeaders üst bilgilere göre eşleşen bir isteğin devam etme izni olup olmadığını belirler.

Büyük/küçük harfe duyarlı headerList olmayan bir HTTP üst bilgisi varsa, istemcisine bir yanıtı 431 Forbidden error döndürülür.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • headerList: İzin verilen üst bilgilerin adlarının büyük/küçük harfe duyarsız listesi.

Aşağıdaki örnekte fabrika RestrictRequestHeaders yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RestrictRequestHeaders=Content-Type,x-request-temp"
        ]
    }
]

RewriteAllResponseHeaders

Fabrika aynı RewriteAllResponseHeaders anda birden çok yanıt üst bilgisini yeniden yazar.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • pattern to match: Üst bilgi değerleriyle eşleşecek normal ifade.
  • replacement: Değiştirme değeri.

Aşağıdaki örnekte fabrika RewriteAllResponseHeaders yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteAllResponseHeaders=\\d,0"
        ]
    }
]

RewriteResponseBody

Fabrika, RewriteResponseBody yanıtın gövdesini değiştirir.

Bu fabrika, her çiftin formu pattern to match:replacementkabul ettiği virgülle ayrılmış anahtar-değer çiftleri listesi olarak düzenlenmiş aşağıdaki yapılandırma parametrelerini kabul eder:

  • pattern to match: Yanıt gövdesindeki metinle eşleşecek normal ifade.
  • replacement: Değiştirme değeri.

Aşağıdaki örnekte fabrika RewriteResponseBody yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteResponseBody=foo:bar,/path-one/:/path-two/"
        ]
    }
]

RewriteJsonAttributesResponseBody

Fabrika, RewriteJsonAttributesResponseBody gösterimi kullanarak JSONPath JSON özniteliklerini yeniden yazar.

Bu fabrika, her çiftin formu jsonpath:replacementkabul ettiği virgülle ayrılmış anahtar-değer çiftleri listesi olarak düzenlenmiş aşağıdaki yapılandırma parametrelerini kabul eder:

  • jsonpath: Yanıt JSONPath gövdesiyle eşleşecek ifade.
  • replacement: Değiştirme değeri.

Aşağıdaki örnekte fabrika RewriteJsonAttributesResponseBody yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteJsonAttributesResponseBody=slides[1].title:Welcome,date:11-11-2022"
        ]
    }
]

Roller

Fabrika, Roles yapılandırılan rollerden birini içeren istekleri yetkilendirir.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • roles: Yetkili rollerin virgülle ayrılmış listesi.

Aşağıdaki örnekte fabrika Roles yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Roles=role_01,role_02"
        ]
    }
]

Kapsamlar

Fabrika, Scopes yapılandırılan OAuth kapsamlardan birini içeren istekleri yetkilendirir.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • scopes: Yetkili OAuth kapsamların virgülle ayrılmış listesi.

Aşağıdaki örnekte fabrika Scopes yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Scopes=api.read,api.write,user"
        ]
    }
]

StoreIpAddress

Fabrika StoreIPAddress , yalnızca uzantı geliştirme için ve uygulama bağlamında kullanılır.

Bu fabrika aşağıdaki yapılandırma parametresini kabul eder:

  • attribute name: IP'yi exchange özniteliği olarak depolamak için kullanılan ad.

Aşağıdaki örnekte fabrika StoreIPAddress yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "StoreIpAddress=ip"
        ]
    }
]

SSO oturum açma

Geçerli SSO login bir yetkilendirme belirteci yoksa fabrika kimlik doğrulamasına yönlendirir. Bu fabrika, açık bir boolean filtre yerine yol tanımında bir değer olarak yapılandırılır.

Aşağıdaki örnekte fabrika SSO login yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "ssoEnabled": true
    }
]

StoreHeader

Fabrika, StoreHeader uygulama bağlamında bir üst bilgi değeri depolar. Bu filtre yalnızca uzantı geliştirme için kullanılır.

Bu fabrika aşağıdaki yapılandırma parametrelerini kabul eder:

  • headers: Denetlenecek üst bilgilerin listesi. Bulunan ilki kullanılır.
  • attribute name: Üst bilgi değerini exchange özniteliği olarak depolamak için kullanılan ad.

Aşağıdaki örnekte fabrika StoreHeader yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "StoreHeader=x-tracing-header,custom-id,x-custom-id,tracingParam"
        ]
    }
]

XmlToJson

Fabrika, XmlToJson XML yanıt gövdesini JSON yanıt gövdesine dönüştürür.

Bu fabrika için parametre yok.

Aşağıdaki örnekte fabrika XmlToJson yapılandırılır:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "XmlToJson"
        ]
    }
]

Sonraki adımlar