Sdílet prostřednictvím


Jak používat filtry tras brány VMware Spring Cloud s plánem Azure Spring Apps Enterprise

Poznámka:

Plány Basic, Standard a Enterprise budou od poloviny března 2025 vyřazeny ze 3letého období vyřazení. Doporučujeme přejít na Azure Container Apps. Další informace najdete v oznámení o vyřazení Azure Spring Apps.

Od 30. září 2024 bude od 30. září 2024 zastaralý plán s úplným vypnutím po šesti měsících. Doporučujeme přejít na Azure Container Apps. Další informace najdete v tématu Migrace spotřeby Azure Spring Apps Úrovně Standard a vyhrazeného plánu do Azure Container Apps.

Tento článek se vztahuje na:❌ Basic/Standard ✔️ Enterprise

Tento článek vysvětluje, jak pomocí filtrů tras brány Spring Cloud VMware s plánem Azure Spring Apps Enterprise směrovat požadavky do vašich aplikací.

Brána VMware Spring Cloud je komerční komponenta VMware Tanzu založená na opensourcovém projektu brány Spring Cloud. Spring Cloud Gateway řeší průřezové otázky pro vývojové týmy rozhraní API, jako je jednotné přihlašování (SSO), řízení přístupu, omezování rychlosti, odolnost, zabezpečení a další. Doručování rozhraní API můžete urychlit pomocí moderních vzorů nativních pro cloud a libovolného programovacího jazyka, který zvolíte pro vývoj rozhraní API.

Brána VMware Spring Cloud zahrnuje následující funkce:

  • Dynamická konfigurace směrování nezávislá na jednotlivých aplikacích, které je možné použít a změnit bez rekompilace.
  • Filtry tras komerčního rozhraní API pro přenos autorizovaných deklarací identity webového tokenu JSON (JWT) do aplikačních služeb
  • Autorizace klientského certifikátu.
  • Přístupy k omezování rychlosti.
  • Konfigurace jističe.
  • Podpora přístupu k aplikačním službám prostřednictvím přihlašovacích údajů základního ověřování HTTP

Pokud se chcete integrovat s portálem API pro VMware Tanzu, brána VMware Spring Cloud automaticky vygeneruje dokumentaci OpenAPI verze 3 po přidání nebo změnách konfigurace trasy. Další informace najdete v tématu Použití portálu API pro VMware Tanzu.

Požadavky

Použití filtrů

Filtry v konfiguraci brány Spring Cloud používáte k reakci na příchozí požadavek nebo odchozí odpověď na konfiguraci trasy.

Pomocí filtru můžete například přidat hlavičku HTTP nebo odepřít přístup na základě autorizačního tokenu.

Použití opensourcových filtrů

Operační systém brány Spring Cloud obsahuje několik GatewayFilter továren, které slouží k vytváření filtrů pro trasy. Následující části popisují tyto továrny.

AddRequestHeader

Továrna AddRequestHeader přidá hlavičku do hlaviček podřízeného požadavku pro všechny odpovídající požadavky.

Tato továrna přijímá následující parametry konfigurace:

  • name
  • value

Následující příklad nakonfiguruje továrnu AddRequestHeader , která přidá hlavičku X-Request-red:blue do hlaviček podřízeného požadavku pro všechny odpovídající požadavky:

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

Objekt AddRequestHeader pro vytváření má přístup k proměnným identifikátoru URI, které se používají ke shodě cesty nebo hostitele. V hodnotě můžete použít proměnné identifikátoru URI a proměnné se rozbalí za běhu.

Následující příklad nakonfiguruje továrnu AddRequestHeader , která používá proměnnou:

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

AddRequestHeadersIfNotPresent

Továrna AddRequestHeadersIfNotPresent přidá hlavičky, pokud nejsou v původním požadavku.

Tato továrna přijímá následující konfigurační parametr:

  • headers: Čárkami oddělený seznam párů klíč-hodnota (název záhlaví, hodnota záhlaví).

Následující příklad nakonfiguruje továrnu AddRequestHeadersIfNotPresent :

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

AddRequestParameter

Objekt AddRequestParameter pro vytváření přidá parametr do řetězce dotazu podřízeného požadavku pro všechny odpovídající požadavky.

Tato továrna přijímá následující parametry konfigurace:

  • name
  • value

Následující příklad nakonfiguruje továrnu AddRequestParameter , která přidá red=blue parametr do řetězce dotazu podřízeného požadavku pro všechny odpovídající požadavky:

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

Objekt AddRequestParameter pro vytváření má přístup k proměnným identifikátoru URI, které se používají ke shodě cesty nebo hostitele. V hodnotě můžete použít proměnné identifikátoru URI a proměnné se rozbalí za běhu.

Následující příklad nakonfiguruje továrnu AddRequestParameter , která používá proměnnou:

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

AddResponseHeader

Továrna AddResponseHeader přidá hlavičku do hlaviček podřízené odpovědi pro všechny odpovídající požadavky.

Tato továrna přijímá následující parametry konfigurace:

  • name
  • value

Následující příklad nakonfiguruje továrnu AddResponseHeader , která přidá hlavičku X-Response-Red:Blue do hlaviček podřízené odpovědi pro všechny odpovídající požadavky:

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

Objekt AddResponseHeader pro vytváření má přístup k proměnným identifikátoru URI, které se používají ke shodě cesty nebo hostitele. V hodnotě můžete použít proměnné identifikátoru URI a proměnné se rozbalí za běhu.

Následující příklad nakonfiguruje továrnu AddResponseHeader , která používá proměnnou:

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

CircuitBreaker

Továrna CircuitBreaker zabalí trasy do jističe.

Tato továrna přijímá následující parametry konfigurace:

  • name: Název jističe.
  • fallbackUri: Přesměrujte identifikátor URI, který může být místní trasou nebo externí obslužnou rutinou.
  • status codes (volitelné): Dvojtečka oddělený seznam stavových kódů, které se mají shodovat, v číselném nebo textovém formátu.
  • failure rate (volitelné): Prahová hodnota, nad kterou se jistič otevře. Výchozí hodnota je 50 %.
  • duration (volitelné): Doba čekání před dalším zavřením. Výchozí hodnota je 60 sekund.

Následující příklad nakonfiguruje továrnu CircuitBreaker :

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

DeDupeResponseHeader

Továrna DeDupeResponseHeader odebere duplicitní hodnoty hlaviček odpovědí.

Tato továrna přijímá následující parametry konfigurace:

  • name: Seznam názvů záhlaví oddělených mezerami.
  • strategy (volitelné): Přijaté hodnoty jsou RETAIN_FIRST, RETAIN_LASTa RETAIN_UNIQUE. Výchozí hodnota je RETAIN_FIRST.

Následující příklad nakonfiguruje továrnu DeDupeResponseHeader , která odebere duplicitní hodnoty Access-Control-Allow-Credentials hlaviček odpovědí a Access-Control-Allow-Origin při přidání obou hodnot logikou CORS brány a podřízenou logikou:

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

Náhradní hlavičky

Továrna FallbackHeaders přidá do hlavičky výjimku jističe. Tento filtr vyžaduje použití CircuitBreaker filtru v jiné trase.

Pro tuto továrnu nejsou žádné parametry.

Následující příklad nakonfiguruje FallbackHeaders objekt pro vytváření s typem výjimky, zprávou a (pokud je k dispozici) typ výjimky a zprávu, kterou FallbackHeaders filtr přidá do požadavku:

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

Názvy hlaviček v konfiguraci můžete přepsat nastavením hodnot následujících parametrů (uvedených s jejich výchozími hodnotami):

  • executionExceptionTypeHeaderName ("Execution-Exception-Type")
  • executionExceptionMessageHeaderName ("Execution-Exception-Message")
  • rootCauseExceptionTypeHeaderName ("Root-Cause-Exception-Type")
  • rootCauseExceptionMessageHeaderName ("Root-Cause-Exception-Message")

JSONToGRPC

Továrna JSONToGRPCFilter převede datovou část JSON na požadavek gRPC.

Tato továrna přijímá následující konfigurační parametr:

  • protoDescriptor: Soubor proto popisovače.

Tento soubor můžete vygenerovat pomocí protoc a zadáním příznaku --descriptor_set_out , jak je znázorněno v následujícím příkladu:

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

Poznámka:

Parametr streaming není podporovaný.

Následující příklad nakonfiguruje továrnu JSONToGRPCFilter pomocí výstupu z protoc:

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

LocalResponseCache

Továrna LocalResponseCache přepíše konfiguraci místní mezipaměti odpovědí pro konkrétní trasy při aktivaci globální mezipaměti.

Tato továrna přijímá následující parametry konfigurace:

  • size: Maximální povolená velikost položek mezipaměti pro tuto trasu před zahájením vyřazení mezipaměti (v kB, MB a GB).
  • timeToLive: Povolená životnost vstupu do mezipaměti před vypršením platnosti. Použijte příponu s doby trvání pro sekundy, m minuty nebo h hodiny.

Následující příklad nakonfiguruje továrnu LocalResponseCache :

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

MapRequestHeader

Továrna MapRequestHeader přidá do podřízeného požadavku hlavičku s aktualizovanými hodnotami z hlavičky příchozího požadavku HTTP.

Tato továrna přijímá následující parametry konfigurace:

  • fromHeader
  • toHeader

Tato továrna vytvoří novou pojmenovanou hlavičku (toHeader) a hodnota se extrahuje z existující pojmenované hlavičky (fromHeader) z příchozího požadavku HTTP. Pokud vstupní hlavička neexistuje, filtr nemá žádný vliv. Pokud nová pojmenovaná hlavička již existuje, její hodnoty se rozšíří o nové hodnoty.

Následující příklad nakonfiguruje továrnu MapRequestHeader , která přidá hlavičku X-Request-Red:<values> do podřízeného požadavku s aktualizovanými hodnotami z hlavičky příchozího Blue požadavku HTTP:

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

PrefixPath

Objekt PrefixPath pro vytváření přidá předponu cesty všech požadavků.

Tato továrna přijímá následující konfigurační parametr:

  • prefix

Následující příklad nakonfiguruje továrnu PrefixPath , která přidá předponu /api do cesty všech požadavků, aby se požadavek /catalog odeslal do /api/catalog:

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

PreserveHostHeader

Objekt PreserveHostHeader pro vytváření nastaví atribut požadavku, který filtr směrování zkontroluje a určí, jestli se má odeslat původní hlavička hostitele nebo hlavička hostitele určená klientem HTTP.

Pro tuto továrnu nejsou žádné parametry.

Následující příklad nakonfiguruje továrnu PreserveHostHeader :

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

RedirectTo

Továrna RedirectTo přidá přesměrování na původní adresu URL.

Tato továrna přijímá následující parametry konfigurace:

  • status: Kód HTTP přesměrování řady 300, například 301.
  • url: Hodnota hlavičky Location . Musí to být platný identifikátor URI. Pro relativní přesměrování byste měli použít uri: no://op jako identifikátor URI definice trasy.

Následující příklad nakonfiguruje továrnu RedirectTo , která odešle stav 302 s hlavičkou Location:https://acme.org pro přesměrování:

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

RemoveJsonAttributesResponseBody

Objekt RemoveJsonAttributesResponseBody pro vytváření odebere atributy JSON a jejich hodnoty z těla odpovědí JSON.

Tato továrna přijímá následující parametry konfigurace:

  • attribute names: Čárkami oddělený seznam názvů atributů, které se mají odebrat z odpovědi JSON.
  • delete recursively (volitelné, logická hodnota): Konfigurace, která odebere atributy pouze na kořenové úrovni (false) nebo rekurzivně (true). Výchozí hodnota je false.

Následující příklad nakonfiguruje továrnu RemoveJsonAttributesResponseBody :

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

RemoveRequestHeader

Objekt RemoveRequestHeader pro vytváření odebere hlavičku z podřízeného požadavku.

Tato továrna přijímá následující konfigurační parametr:

  • name: Název hlavičky, která se má odebrat.

Následující výpis nakonfiguruje továrnu RemoveRequestHeader , která před odesláním podřízeného objektu odebere hlavičku X-Request-Foo :

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

RemoveRequestParameter

Objekt RemoveRequestParameter pro vytváření odebere parametr před odesláním podřízeného objektu.

Tato továrna přijímá následující konfigurační parametr:

  • name: Název parametru dotazu, který se má odebrat.

Následující příklad nakonfiguruje továrnu RemoveRequestParameter , která odebere parametr před odesláním podřízeného objektu red :

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

RemoveResponseHeader

Objekt RemoveResponseHeader pro vytváření odebere hlavičku z odpovědi, než se vrátí klientovi brány.

Tato továrna přijímá následující konfigurační parametr:

  • name: Název hlavičky, která se má odebrat.

Následující výpis nakonfiguruje továrnu RemoveResponseHeader , která před vrácením do klienta brány odebere X-Response-Foo hlavičku z odpovědi:

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

RequestHeaderSize

Objekt RequestHeaderSize pro vytváření určuje velikost hlavičky požadavku.

Tato továrna přijímá následující parametry konfigurace:

  • maxSize: Maximální velikost dat povolená hlavičkou požadavku, včetně klíče a hodnoty.
  • errorHeaderName: Název hlavičky odpovědi obsahující chybovou zprávu. Ve výchozím nastavení je errorMessagenázev hlavičky odpovědi .

Následující výpis nakonfiguruje továrnu RequestHeaderSize , která odešle stav 431 , pokud je velikost hlavičky požadavku větší než 1 000 bajtů:

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

PřepsáníLocationResponseHeader

Továrna RewriteLocationResponseHeader upraví hodnotu Location hlavičky odpovědi, obvykle kvůli odstranění podrobností specifických pro back-end.

Tato továrna přijímá následující parametry konfigurace:

  • stripVersionMode: Tento parametr má následující možné hodnoty: NEVER_STRIP, AS_IN_REQUESTa ALWAYS_STRIP. Výchozí hodnota je AS_IN_REQUEST.

    • NEVER_STRIP: Verze se neodebrala, i když původní cesta požadavku neobsahuje žádnou verzi.
    • AS_IN_REQUEST: Verze se odstraní pouze v případě, že původní cesta požadavku neobsahuje žádnou verzi.
    • ALWAYS_STRIP: Verze se vždy odstraní, i když původní cesta požadavku obsahuje verzi.
  • hostValue: Tento parametr slouží k nahrazení host:port části hlavičky odpovědi Location při zadání. Pokud není zadaný, použije se hodnota hlavičky Host požadavku.

  • protocolsRegex: Platný regulární výraz String, proti kterému se název protokolu shoduje. Pokud se neshoduje, filtr nefunguje. Výchozí hodnota je http|https|ftp|ftps.

  • locationHeaderName

Následující výpis konfiguruje továrnu RewriteLocationResponseHeader :

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

V tomto příkladu je hodnota hlavičky POST object-service.prod.example.net/v2/some/object/id api.example.com/some/object/nameLocation odpovědi přepsána jako .api.example.com/some/object/id

Přepsání cesty

Továrna RewritePath používá regulární výrazy Java pro flexibilní způsob, jak přepsat cestu požadavku.

Tato továrna přijímá následující parametry konfigurace:

  • regexp
  • replacement

Následující výpis konfiguruje továrnu RewritePath :

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

V tomto příkladu pro cestu /red/bluepožadavku této konfigurace nastaví cestu před /blue provedením podřízeného požadavku.

PřepsatResponseHeader

Továrna RewriteResponseHeader používá regulární výrazy Java pro flexibilní způsob, jak přepsat hodnotu hlavičky odpovědi.

Tato továrna přijímá následující parametry konfigurace:

  • name
  • regexp
  • replacement

Následující příklad nakonfiguruje továrnu RewriteResponseHeader :

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

V tomto příkladu je pro hodnotu /42?user=ford&password=omg!what&flag=truehlavičky nastavena konfigurace po /42?user=ford&password=***&flag=true provedení podřízeného požadavku.

SetPath

Továrna SetPath nabízí jednoduchý způsob, jak manipulovat s cestou požadavku tím, že umožňuje šablonované segmenty cesty. Tento filtr používá šablony URI z spring frameworku a umožňuje více odpovídajících segmentů.

Tato továrna přijímá následující konfigurační parametr:

  • template

Následující příklad nakonfiguruje továrnu SetPath :

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

V tomto příkladu pro cestu /red/bluepožadavku této konfigurace nastaví cestu před /blue provedením podřízeného požadavku.

SetRequestHeader

Továrna SetRequestHeader nahradí (místo přidávání) všechny hlavičky zadaným názvem.

Tato továrna přijímá následující parametry konfigurace:

  • name
  • value

Následující výpis konfiguruje továrnu SetRequestHeader :

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

V tomto příkladu odpověděl X-Request-Red:1234podřízený server a nahradil ho .X-Request-Red:Blue

Objekt SetRequestHeader pro vytváření má přístup k proměnným identifikátoru URI, které se používají ke shodě cesty nebo hostitele. V hodnotě můžete použít proměnné identifikátoru URI a proměnné se rozbalí za běhu.

Následující příklad nakonfiguruje továrnu SetRequestHeader , která používá proměnnou:

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

SetResponseHeader

Továrna SetResponseHeader nahradí (místo přidávání) všechny hlavičky zadaným názvem.

Tato továrna přijímá následující parametry konfigurace:

  • name
  • value

Následující výpis konfiguruje továrnu SetResponseHeader :

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

V tomto příkladu odpověděl X-Response-Red:1234podřízený server a nahradil ho .X-Response-Red:Blue

Objekt SetResponseHeader pro vytváření má přístup k proměnným identifikátoru URI, které se používají ke shodě cesty nebo hostitele. V hodnotě můžete použít proměnné identifikátoru URI a proměnné se rozbalí za běhu.

Následující příklad nakonfiguruje továrnu SetResponseHeader , která používá proměnnou:

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

SetStatus

Továrna SetStatus nakonfiguruje stav odpovědi požadavku serveru.

Tato továrna přijímá následující konfigurační parametr:

  • status: Platná hodnota Spring HttpStatus , která může celočíselnou hodnotu, například 404, nebo řetězcové vyjádření výčtu, například NOT_FOUND.

Následující výpis konfiguruje továrnu SetStatus :

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

StripPrefix

Objekt StripPrefix pro vytváření odebere předponu z požadavku před odesláním podřízeného objektu.

Tato továrna přijímá následující konfigurační parametr:

  • parts: Počet částí v cestě k prokládání z požadavku před odesláním podřízenosti. Výchozí hodnota je 1.

Následující příklad nakonfiguruje továrnu StripPrefix :

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

V tomto příkladu se prostřednictvím brány provede požadavek na /name/blue/red. Žádost, která nameservice se zobrazí jako nameservice/red.

Zkusit znovu

Továrna Retry určuje počet pokusů o opakování.

Tato továrna přijímá následující parametry konfigurace:

  • retries: Počet opakovaných pokusů, které by se měly pokusit.
  • statuses: Stavové kódy HTTP, které by se měly opakovat, reprezentované pomocí org.springframework.http.HttpStatus.
  • methods: Metody HTTP, které by se měly opakovat, reprezentované pomocí org.springframework.http.HttpMethod.
  • series: Série stavových kódů, které se mají opakovat, reprezentované pomocí org.springframework.http.HttpStatus.Series.
  • exceptions: Seznam vyvolaných výjimek, které by se měly opakovat.
  • backoff: Nakonfigurované exponenciální zpochybnění opakování. Opakování se provádí po intervalu zpětného firstBackoff * (factor ^ n)ukončení , kde n je iterace. Pokud maxBackoff je nakonfigurováno, maximální použitý backoff je omezen na maxBackoff. Pokud basedOnPreviousValue je pravda, vypočítá backoff se pomocí prevBackoff * factor.

Pro filtr jsou nakonfigurované následující výchozí hodnoty, pokud je tato možnost povolená Retry :

  • retries:třikrát.
  • series: 5XX série.
  • methods: Metoda GET.
  • exceptions: IOException a TimeoutException.
  • backoff:invalidní.

Následující příklad nakonfiguruje továrnu Retry :

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

RequestSize

Továrna RequestSize může omezit přístup k podřízené službě, pokud je velikost požadavku větší než povolený limit.

Tato továrna přijímá následující konfigurační parametr:

  • maxSize: Typ DataSize , ve kterém jsou hodnoty definovány jako číslo následované volitelnou DataUnit příponou, například KB nebo MB. Výchozí hodnota přípony je B pro bajty. Jedná se o povolený limit velikosti požadavku definovaného v bajtech.

Následující příklad nakonfiguruje továrnu RequestSize :

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

V tomto příkladu, když požadavek je odmítnut z důvodu velikosti, továrna RequestSize nastaví stav odpovědi na 413 Payload Too Large jinou hlavičku errorMessage.

Následující příklad ukazuje errorMessage:

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

TokenRelay

Objekt TokenRelay pro vytváření předává OAuth2 přístupový token podřízeným prostředkům. Tento filtr je nakonfigurovaný boolean jako hodnota v definici trasy, nikoli jako explicitní filtr.

Následující příklad nakonfiguruje továrnu TokenRelay :

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

Použití komerčních filtrů

Spring Cloud Gateway pro Kubernetes také poskytuje mnoho vlastních GatewayFilter továren. Následující části popisují tyto továrny.

AllowedRequestCookieCount

Továrna AllowedRequestCookieCount určuje, jestli je možné pokračovat odpovídající žádostí na základě počtu souborů cookie.

Tato továrna přijímá následující konfigurační parametr:

  • amount: Počet povolených souborů cookie.

Následující příklad nakonfiguruje továrnu AllowedRequestCookieCount :

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

AllowedRequestHeadersCount

Objekt AllowedRequestHeadersCount pro vytváření určuje, jestli má odpovídající požadavek povoleno pokračovat na základě počtu hlaviček.

Tato továrna přijímá následující konfigurační parametr:

  • amount: Počet povolených hlaviček.

Následující příklad nakonfiguruje továrnu AllowedRequestHeadersCount :

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

AllowedRequestQueryParamsCount

Objekt AllowedRequestQueryParamsCount pro vytváření určuje, jestli má odpovídající požadavek povoleno pokračovat na základě parametrů číselného dotazu.

Tato továrna přijímá následující konfigurační parametr:

  • amount: Počet povolených parametrů.

Následující příklad nakonfiguruje továrnu AllowedRequestQueryParamsCount :

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

Základní ověřování

Továrna BasicAuth přidá hlavičku BasicAuth Authorization k žádostem.

Pro tuto továrnu nejsou žádné parametry.

Následující příklad nakonfiguruje továrnu BasicAuth :

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

ClaimHeader

Objekt ClaimHeader pro vytváření kopíruje data z deklarace identity JWT do hlavičky HTTP.

Tato továrna přijímá následující parametry konfigurace:

  • Claim name: Název deklarace identity rozlišující malá a velká písmena, která se mají předat.
  • Header name: Název hlavičky HTTP.

Následující příklad nakonfiguruje továrnu ClaimHeader :

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

ClientCertificateHeader

Továrna ClientCertificateHeader ověří certifikát hlavičky X-Forwarded-Client-Cert .

Tato továrna přijímá následující parametry konfigurace:

  • domain pattern: Hodnota X-Forwarded-Client-Cert podle schopnosti Kubernetes rozpoznat certifikační autoritu klientského certifikátu.
  • certificate fingerprint(volitelné): Otisk certifikátu TLS/SSL.

Následující příklad nakonfiguruje továrnu ClientCertificateHeader :

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

Cors

Továrna Cors aktivuje ověření CORS na trase.

Tato továrna přijímá následující konfigurační parametry uspořádané jako páry klíč-hodnota pro možnosti CORS:

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

Následující příklad nakonfiguruje továrnu Cors :

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

JsonToXml

Továrna JsonToXml transformuje text odpovědi JSON na tělo odpovědi XML.

Tato továrna přijímá následující konfigurační parametr:

  • wrapper: Název kořenové značky pro odpověď XML, pokud je k vygenerování platného KÓDU XML vyžadována jiná kořenová značka. Výchozí hodnota je response.

Následující příklad nakonfiguruje továrnu JsonToXml :

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

RateLimit

Objekt RateLimit pro vytváření určuje, jestli má odpovídající požadavek povoleno pokračovat na základě svazku požadavku.

Tato továrna přijímá následující parametry konfigurace:

  • request limit: Maximální počet žádostí přijatých během okna.
  • window duration: Doba trvání okna v milisekundách. Alternativně můžete použít sm přípony nebo h , které určují dobu trvání v sekundách, minutách nebo hodinách.
  • partition source (volitelné): Umístění klíče oddílu (claim, headernebo IPs).
  • partition key (volitelné): Hodnota použitá k dělení čítačů požadavků.

Následující příklad nakonfiguruje továrnu RateLimit :

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

Následující příklady ukazují další RateLimit konfigurace:

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

Objekt RestrictRequestHeaders pro vytváření určuje, jestli má odpovídající požadavek povoleno pokračovat na základě hlaviček.

Pokud existují nějaká hlavička HTTP, která nejsou v konfiguraci bez rozlišování headerList malých a malých písmen, vrátí se klientovi odpověď 431 Forbidden error .

Tato továrna přijímá následující konfigurační parametr:

  • headerList: Seznam názvů povolených hlaviček bez rozlišování malých a velkých písmen.

Následující příklad nakonfiguruje továrnu RestrictRequestHeaders :

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

PřepsáníAllResponseHeaders

Továrna RewriteAllResponseHeaders přepíše více hlaviček odpovědí najednou.

Tato továrna přijímá následující parametry konfigurace:

  • pattern to match: Regulární výraz, který se má shodovat s hodnotami záhlaví.
  • replacement: Hodnota nahrazení.

Následující příklad nakonfiguruje továrnu RewriteAllResponseHeaders :

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

PřepsatResponseBody

Továrna RewriteResponseBody upraví tělo odpovědi.

Tato továrna přijímá následující konfigurační parametry uspořádané jako čárkami oddělený seznam párů klíč-hodnota, kde každý pár přijímá formulář pattern to match:replacement:

  • pattern to match: Regulární výraz, který se má shodovat s textem v textu odpovědi.
  • replacement: Hodnota nahrazení.

Následující příklad nakonfiguruje továrnu RewriteResponseBody :

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

PřepsáníJsonAttributesResponseBody

Objekt RewriteJsonAttributesResponseBody pro vytváření přepisuje atributy JSON pomocí JSONPath zápisu.

Tato továrna přijímá následující konfigurační parametry uspořádané jako čárkami oddělený seznam párů klíč-hodnota, kde každý pár přijímá formulář jsonpath:replacement:

  • jsonpath: Výraz JSONPath , který se má shodovat s textem odpovědi.
  • replacement: Hodnota nahrazení.

Následující příklad nakonfiguruje továrnu RewriteJsonAttributesResponseBody :

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

Role

Továrna Roles autorizuje požadavky, které obsahují jednu z nakonfigurovaných rolí.

Tato továrna přijímá následující konfigurační parametr:

  • roles: Čárkami oddělený seznam autorizovaných rolí.

Následující příklad nakonfiguruje továrnu Roles :

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

Rozsahy

Továrna Scopes autorizuje požadavky, které obsahují jeden z nakonfigurovaných OAuth oborů.

Tato továrna přijímá následující konfigurační parametr:

  • scopes: Čárkami oddělený seznam autorizovaných OAuth oborů.

Následující příklad nakonfiguruje továrnu Scopes :

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

StoreIpAddress

Továrna StoreIPAddress se používá pouze pro vývoj rozšíření a v kontextu aplikace.

Tato továrna přijímá následující konfigurační parametr:

  • attribute name: Název použitý k uložení IP adresy jako atributu výměny.

Následující příklad nakonfiguruje továrnu StoreIPAddress :

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

Přihlášení přes jednotné přihlašování

Továrna SSO login přesměruje na ověření, pokud neexistuje platný autorizační token. Tato továrna je nakonfigurovaná jako hodnota v definici trasy, nikoli jako boolean explicitní filtr.

Následující příklad nakonfiguruje továrnu SSO login :

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

StoreHeader

Objekt StoreHeader pro vytváření ukládá hodnotu hlavičky v kontextu aplikace. Tento filtr se používá jenom pro vývoj rozšíření.

Tato továrna přijímá následující parametry konfigurace:

  • headers: Seznam záhlaví, která chcete zkontrolovat. Použije se první nalezený.
  • attribute name: Název použitý k uložení hodnoty hlavičky jako atribut výměny.

Následující příklad nakonfiguruje továrnu StoreHeader :

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

XmlToJson

Továrna XmlToJson transformuje tělo odpovědi XML na text odpovědi JSON.

Pro tuto továrnu nejsou žádné parametry.

Následující příklad nakonfiguruje továrnu XmlToJson :

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

Další kroky