Bagikan melalui


Cara menggunakan filter rute VMware Spring Cloud Gateway dengan paket Azure Spring Apps Enterprise

Catatan

Azure Spring Apps adalah nama baru untuk layanan Azure Spring Cloud. Meskipun layanan memiliki nama baru, Anda akan melihat nama lama di beberapa tempat untuk sementara saat kami berupaya memperbarui aset seperti cuplikan layar, video, dan diagram.

Artikel ini berlaku untuk:❌ Basic/Standard ✔️ Enterprise

Artikel ini menjelaskan cara menggunakan filter rute VMware Spring Cloud Gateway dengan paket Azure Spring Apps Enterprise untuk merutekan permintaan ke aplikasi Anda.

VMware Spring Cloud Gateway adalah komponen VMware Tanzu komersial berdasarkan proyek Spring Cloud Gateway sumber terbuka. Spring Cloud Gateway menangani masalah lintas pemotongan untuk tim pengembangan API, seperti akses menyeluruh (SSO), kontrol akses, pembatasan laju, ketahanan, keamanan, dan banyak lagi. Anda dapat mempercepat pengiriman API menggunakan pola asli cloud modern, dan bahasa pemrograman apa pun yang Anda pilih untuk pengembangan API.

VMware Spring Cloud Gateway menyertakan fitur-fitur berikut:

  • Konfigurasi perutean dinamis, independen dari aplikasi individual yang dapat diterapkan dan diubah tanpa kompilasi ulang.
  • Filter rute API Komersial untuk mengangkut klaim JSON Web Token (JWT) resmi ke layanan aplikasi.
  • Otorisasi sertifikat klien.
  • Pendekatan pembatasan tarif.
  • Konfigurasi pemutus sirkuit.
  • Dukungan untuk mengakses layanan aplikasi melalui kredensial Autentikasi Dasar HTTP.

Untuk berintegrasi dengan Portal API untuk VMware Tanzu, VMware Spring Cloud Gateway secara otomatis menghasilkan dokumentasi OpenAPI versi 3 setelah penambahan atau perubahan konfigurasi rute apa pun. Untuk informasi selengkapnya, lihat Menggunakan Portal API untuk VMware Tanzu.

Prasyarat

Menggunakan filter

Anda menggunakan filter dalam konfigurasi Spring Cloud Gateway untuk bertindak berdasarkan permintaan masuk atau respons keluar terhadap konfigurasi rute.

Misalnya, Anda dapat menggunakan filter untuk menambahkan header HTTP atau untuk menolak akses berdasarkan token otorisasi.

Menggunakan filter sumber terbuka

Spring Cloud Gateway OSS mencakup beberapa GatewayFilter pabrik yang digunakan untuk membuat filter untuk rute. Bagian berikut menjelaskan pabrik-pabrik ini.

AddRequestHeader

AddRequestHeader Pabrik menambahkan header ke header permintaan hilir untuk semua permintaan yang cocok.

Pabrik ini menerima parameter konfigurasi berikut:

  • name
  • value

Contoh berikut mengonfigurasi AddRequestHeader pabrik yang menambahkan header X-Request-red:blue ke header permintaan hilir untuk semua permintaan yang cocok:

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

AddRequestHeader Pabrik memiliki akses ke variabel URI yang digunakan untuk mencocokkan jalur atau host. Anda dapat menggunakan variabel URI dalam nilai, dan variabel diperluas saat runtime.

Contoh berikut mengonfigurasi AddRequestHeader pabrik yang menggunakan variabel:

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

AddRequestHeadersIfNotPresent

AddRequestHeadersIfNotPresent Pabrik menambahkan header jika tidak ada dalam permintaan asli.

Pabrik ini menerima parameter konfigurasi berikut:

  • headers: Daftar pasangan kunci-nilai yang dipisahkan koma (nama header, nilai header).

Contoh berikut mengonfigurasi AddRequestHeadersIfNotPresent pabrik:

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

AddRequestParameter

AddRequestParameter Pabrik menambahkan parameter ke string kueri permintaan hilir untuk semua permintaan yang cocok.

Pabrik ini menerima parameter konfigurasi berikut:

  • name
  • value

Contoh berikut mengonfigurasi AddRequestParameter pabrik yang menambahkan red=blue parameter ke string kueri permintaan hilir untuk semua permintaan yang cocok:

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

AddRequestParameter Pabrik memiliki akses ke variabel URI yang digunakan untuk mencocokkan jalur atau host. Anda dapat menggunakan variabel URI dalam nilai, dan variabel diperluas saat runtime.

Contoh berikut mengonfigurasi AddRequestParameter pabrik yang menggunakan variabel:

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

AddResponseHeader

AddResponseHeader Pabrik menambahkan header ke header respons hilir untuk semua permintaan yang cocok.

Pabrik ini menerima parameter konfigurasi berikut:

  • name
  • value

Contoh berikut mengonfigurasi AddResponseHeader pabrik yang menambahkan X-Response-Red:Blue header ke header respons hilir untuk semua permintaan yang cocok:

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

AddResponseHeader Pabrik memiliki akses ke variabel URI yang digunakan untuk mencocokkan jalur atau host. Anda dapat menggunakan variabel URI dalam nilai, dan variabel diperluas saat runtime.

Contoh berikut mengonfigurasi AddResponseHeader pabrik yang menggunakan variabel:

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

CircuitBreaker

Pabrik membungkus CircuitBreaker rute di pemutus sirkuit.

Pabrik ini menerima parameter konfigurasi berikut:

  • name: Nama pemutus sirkuit.
  • fallbackUri: URI rute ulang, yang dapat menjadi rute lokal atau handler eksternal.
  • status codes (opsional): Daftar kode status yang dipisahkan titik dua untuk dicocokkan, dalam format angka atau teks.
  • failure rate (opsional): Ambang batas di atas tempat pemutus sirkuit terbuka. Nilai defaultnya adalah 50%.
  • duration (opsional): Waktu untuk menunggu sebelum menutup lagi. Nilai default-nya adalah 60 detik.

Contoh berikut mengonfigurasi CircuitBreaker pabrik:

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

DeDupeResponseHeader

Pabrik DeDupeResponseHeader menghapus nilai duplikat header respons.

Pabrik ini menerima parameter konfigurasi berikut:

  • name: Daftar nama header yang dipisahkan spasi.
  • strategy (opsional): Nilai yang diterima adalah RETAIN_FIRST, , RETAIN_LASTdan RETAIN_UNIQUE. Nilai defaultnya adalah RETAIN_FIRST.

Contoh berikut mengonfigurasi DeDupeResponseHeader pabrik yang menghapus nilai duplikat header Access-Control-Allow-Credentials respons dan Access-Control-Allow-Origin saat kedua nilai ditambahkan oleh logika CORS gateway dan logika hilir:

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

FallbackHeaders

FallbackHeaders Pabrik menambahkan pengecualian pemutus sirkuit ke header. Filter ini memerlukan penggunaan CircuitBreaker filter di rute lain.

Tidak ada parameter untuk pabrik ini.

Contoh berikut mengonfigurasi FallbackHeaders pabrik dengan jenis pengecualian, pesan, dan (jika tersedia) jenis pengecualian akar penyebab dan pesan yang FallbackHeaders ditambahkan filter ke permintaan:

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

Anda dapat menimpa nama header dalam konfigurasi dengan mengatur nilai parameter berikut (disebutkan dengan nilai defaultnya):

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

JSONToGRPC

JSONToGRPCFilter Pabrik mengonversi payload JSON menjadi permintaan gRPC.

Pabrik ini menerima parameter konfigurasi berikut:

  • protoDescriptor: File deskriptor proto.

Anda dapat membuat file ini dengan menggunakan protoc dan menentukan bendera, seperti yang --descriptor_set_out ditunjukkan dalam contoh berikut:

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

Catatan

Parameter streaming tidak didukung.

Contoh berikut mengonfigurasi JSONToGRPCFilter pabrik menggunakan output dari protoc:

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

LocalResponseCache

Pabrik LocalResponseCache mengambil alih konfigurasi cache respons lokal untuk rute tertentu saat cache global diaktifkan.

Pabrik ini menerima parameter konfigurasi berikut:

  • size: Ukuran maksimum entri cache yang diizinkan untuk rute ini sebelum pengeluaran cache dimulai (dalam KB, MB, dan GB).
  • timeToLive: Masa pakai entri cache yang diizinkan sebelum kedaluwarsa. Gunakan akhiran s durasi selama detik, m untuk menit, atau h selama berjam-jam.

Contoh berikut mengonfigurasi LocalResponseCache pabrik:

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

MapRequestHeader

Pabrik MapRequestHeader menambahkan header ke permintaan hilir dengan nilai yang diperbarui dari header permintaan HTTP masuk.

Pabrik ini menerima parameter konfigurasi berikut:

  • fromHeader
  • toHeader

Pabrik ini membuat header bernama baru (toHeader), dan nilai diekstrak dari header bernama (fromHeader) yang ada dari permintaan HTTP masuk. Jika header input tidak ada, filter tidak berpengaruh. Jika header bernama baru sudah ada, nilainya akan ditambahkan dengan nilai baru.

Contoh berikut mengonfigurasi MapRequestHeader pabrik yang menambahkan X-Request-Red:<values> header ke permintaan hilir dengan nilai yang diperbarui dari header permintaan Blue HTTP masuk:

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

PrefixPath

PrefixPath Pabrik menambahkan awalan ke jalur semua permintaan.

Pabrik ini menerima parameter konfigurasi berikut:

  • prefix

Contoh berikut mengonfigurasi PrefixPath pabrik yang menambahkan awalan /api ke jalur semua permintaan, sehingga permintaan dikirim /catalog ke /api/catalog:

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

PreserveHostHeader

Pabrik PreserveHostHeader menetapkan atribut permintaan yang diperiksa filter perutean untuk menentukan apakah akan mengirim header host asli atau header host yang ditentukan oleh klien HTTP.

Tidak ada parameter untuk pabrik ini.

Contoh berikut mengonfigurasi PreserveHostHeader pabrik:

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

AlihkanKe

Pabrik RedirectTo menambahkan pengalihan ke URL asli.

Pabrik ini menerima parameter konfigurasi berikut:

  • status: Kode HTTP pengalihan seri 300, seperti 301.
  • url: Nilai Location header. Harus berupa URI yang valid. Untuk pengalihan relatif, Anda harus menggunakan uri: no://op sebagai URI definisi rute Anda.

Contoh berikut mengonfigurasi RedirectTo pabrik yang mengirim status 302 dengan Location:https://acme.org header untuk melakukan pengalihan:

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

RemoveJsonAttributesResponseBody

RemoveJsonAttributesResponseBody Pabrik menghapus atribut JSON dan nilainya dari badan respons JSON.

Pabrik ini menerima parameter konfigurasi berikut:

  • attribute names: Daftar nama atribut yang dipisahkan koma untuk dihapus dari respons JSON.
  • delete recursively (opsional, boolean): Konfigurasi yang menghapus atribut hanya pada tingkat akar (false), atau secara rekursif (true). Nilai defaultnya adalah false.

Contoh berikut mengonfigurasi RemoveJsonAttributesResponseBody pabrik:

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

RemoveRequestHeader

Pabrik RemoveRequestHeader menghapus header dari permintaan hilir.

Pabrik ini menerima parameter konfigurasi berikut:

  • name: Nama header yang akan dihapus.

Daftar berikut mengonfigurasi RemoveRequestHeader pabrik yang menghapus X-Request-Foo header sebelum dikirim ke hilir:

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

RemoveRequestParameter

RemoveRequestParameter Pabrik menghapus parameter sebelum dikirim ke hilir.

Pabrik ini menerima parameter konfigurasi berikut:

  • name: Nama parameter kueri yang akan dihapus.

Contoh berikut mengonfigurasi RemoveRequestParameter pabrik yang menghapus red parameter sebelum dikirim ke hilir:

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

RemoveResponseHeader

Pabrik RemoveResponseHeader menghapus header dari respons sebelum dikembalikan ke klien gateway.

Pabrik ini menerima parameter konfigurasi berikut:

  • name: Nama header yang akan dihapus.

Daftar berikut mengonfigurasi RemoveResponseHeader pabrik yang menghapus X-Response-Foo header dari respons sebelum dikembalikan ke klien gateway:

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

RequestHeaderSize

RequestHeaderSize Pabrik menentukan ukuran header permintaan.

Pabrik ini menerima parameter konfigurasi berikut:

  • maxSize: Ukuran data maksimum yang diizinkan oleh header permintaan, termasuk kunci dan nilai.
  • errorHeaderName: Nama header respons yang berisi pesan kesalahan. Secara default, nama header respons adalah errorMessage.

Daftar berikut mengonfigurasi RequestHeaderSize pabrik yang mengirim status 431 jika ukuran header permintaan apa pun lebih besar dari 1000 byte:

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

RewriteLocationResponseHeader

Pabrik RewriteLocationResponseHeader memodifikasi nilai Location header respons, biasanya untuk menyingkirkan detail khusus backend.

Pabrik ini menerima parameter konfigurasi berikut:

  • stripVersionMode: Parameter ini memiliki nilai yang mungkin berikut: NEVER_STRIP, , AS_IN_REQUESTdan ALWAYS_STRIP. Nilai defaultnya adalah AS_IN_REQUEST.

    • NEVER_STRIP: Versi tidak dilucuti, meskipun jalur permintaan asli tidak berisi versi.
    • AS_IN_REQUEST: Versi dilucuti hanya jika jalur permintaan asli tidak berisi versi.
    • ALWAYS_STRIP: Versi selalu dilucuti, bahkan jika jalur permintaan asli berisi versi.
  • hostValue: Parameter ini digunakan untuk mengganti bagian host:port header respons Location saat disediakan. Jika tidak disediakan, nilai Host header permintaan digunakan.

  • protocolsRegex: Regex Stringyang valid , di mana nama protokol cocok. Jika tidak cocok, filter tidak berfungsi. Nilai defaultnya adalah http|https|ftp|ftps.

  • locationHeaderName

Daftar berikut mengonfigurasi RewriteLocationResponseHeader pabrik:

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

Dalam contoh ini, untuk nilai POSTapi.example.com/some/object/namepermintaan , Location nilai header respons ditulis object-service.prod.example.net/v2/some/object/id ulang sebagai api.example.com/some/object/id.

RewritePath

Pabrik RewritePath menggunakan ekspresi reguler Java untuk cara yang fleksibel untuk menulis ulang jalur permintaan.

Pabrik ini menerima parameter konfigurasi berikut:

  • regexp
  • replacement

Daftar berikut mengonfigurasi RewritePath pabrik:

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

Dalam contoh ini, untuk jalur /red/bluepermintaan , konfigurasi ini mengatur jalur ke /blue sebelum membuat permintaan hilir.

RewriteResponseHeader

Pabrik RewriteResponseHeader menggunakan ekspresi reguler Java untuk cara yang fleksibel untuk menulis ulang nilai header respons.

Pabrik ini menerima parameter konfigurasi berikut:

  • name
  • regexp
  • replacement

Contoh berikut mengonfigurasi RewriteResponseHeader pabrik:

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

Dalam contoh ini, untuk nilai /42?user=ford&password=omg!what&flag=trueheader , konfigurasi diatur ke /42?user=ford&password=***&flag=true setelah membuat permintaan hilir.

SetPath

SetPath Pabrik menawarkan cara sederhana untuk memanipulasi jalur permintaan dengan mengizinkan segmen jalur yang di-template. Filter ini menggunakan templat URI dari Spring Framework dan memungkinkan beberapa segmen yang cocok.

Pabrik ini menerima parameter konfigurasi berikut:

  • template

Contoh berikut mengonfigurasi SetPath pabrik:

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

Dalam contoh ini, untuk jalur /red/bluepermintaan , konfigurasi ini mengatur jalur ke /blue sebelum membuat permintaan hilir.

SetRequestHeader

SetRequestHeader Pabrik mengganti (daripada menambahkan) semua header dengan nama yang diberikan.

Pabrik ini menerima parameter konfigurasi berikut:

  • name
  • value

Daftar berikut mengonfigurasi SetRequestHeader pabrik:

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

Dalam contoh ini, server hilir merespons dengan X-Request-Red:1234, dan diganti dengan X-Request-Red:Blue.

SetRequestHeader Pabrik memiliki akses ke variabel URI yang digunakan untuk mencocokkan jalur atau host. Anda dapat menggunakan variabel URI dalam nilai, dan variabel diperluas saat runtime.

Contoh berikut mengonfigurasi SetRequestHeader pabrik yang menggunakan variabel:

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

SetResponseHeader

SetResponseHeader Pabrik mengganti (daripada menambahkan) semua header dengan nama yang diberikan.

Pabrik ini menerima parameter konfigurasi berikut:

  • name
  • value

Daftar berikut mengonfigurasi SetResponseHeader pabrik:

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

Dalam contoh ini, server hilir merespons dengan X-Response-Red:1234, dan diganti dengan X-Response-Red:Blue.

SetResponseHeader Pabrik memiliki akses ke variabel URI yang digunakan untuk mencocokkan jalur atau host. Anda dapat menggunakan variabel URI dalam nilai, dan variabel diperluas saat runtime.

Contoh berikut mengonfigurasi SetResponseHeader pabrik yang menggunakan variabel:

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

SetStatus

Pabrik SetStatus mengonfigurasi status respons permintaan server.

Pabrik ini menerima parameter konfigurasi berikut:

  • status: Nilai Spring HttpStatus yang valid, yang dapat berupa nilai bilangan bulat seperti 404, atau representasi string enumerasi, seperti NOT_FOUND.

Daftar berikut mengonfigurasi SetStatus pabrik:

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

StripPrefix

StripPrefix Pabrik menghapus awalan dari permintaan sebelum mengirimkannya ke hilir.

Pabrik ini menerima parameter konfigurasi berikut:

  • parts: Jumlah bagian di jalur yang akan dilucuti dari permintaan sebelum mengirimkannya ke hilir. Nilai default adalah 1.

Contoh berikut mengonfigurasi StripPrefix pabrik:

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

Dalam contoh ini, permintaan dibuat melalui gateway ke /name/blue/red. Permintaan yang dibuat untuk nameservice muncul sebagai nameservice/red.

Coba lagi

Retry Pabrik menentukan jumlah percobaan ulang yang dicoba.

Pabrik ini menerima parameter konfigurasi berikut:

  • retries: Jumlah percobaan ulang yang harus dicoba.
  • statuses: Kode status HTTP yang harus dicoba kembali, diwakili dengan menggunakan org.springframework.http.HttpStatus.
  • methods: Metode HTTP yang harus dicoba kembali, diwakili dengan menggunakan org.springframework.http.HttpMethod.
  • series: Rangkaian kode status yang akan dicoba kembali, diwakili dengan menggunakan org.springframework.http.HttpStatus.Series.
  • exceptions: Daftar pengecualian yang dilemparkan yang harus dicoba kembali.
  • backoff: Backoff eksponensial yang dikonfigurasi untuk percobaan ulang. Percobaan ulang dilakukan setelah interval firstBackoff * (factor ^ n)backoff , di mana n adalah iterasi. Jika maxBackoff dikonfigurasi, backoff maksimum yang diterapkan terbatas pada maxBackoff. Jika basedOnPreviousValue benar, backoff dihitung dengan menggunakan prevBackoff * factor.

Default berikut dikonfigurasi untuk Retry filter, saat diaktifkan:

  • retries: tiga kali.
  • series: Seri 5XX.
  • methods: Metode GET.
  • exceptions: IOException dan TimeoutException.
  • backoff:Tamu penyandang cacat.

Contoh berikut mengonfigurasi Retry pabrik:

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

RequestSize

RequestSize Pabrik dapat membatasi permintaan untuk mencapai layanan hilir ketika ukuran permintaan lebih besar dari batas yang diizinkan.

Pabrik ini menerima parameter konfigurasi berikut:

  • maxSizeDataSize: Jenis di mana nilai didefinisikan sebagai angka diikuti dengan akhiran opsional DataUnit seperti KB atau MB. Nilai akhiran default adalah B untuk byte. Ini adalah batas ukuran permintaan yang diizinkan yang ditentukan dalam byte.

Contoh berikut mengonfigurasi RequestSize pabrik:

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

Dalam contoh ini, ketika permintaan ditolak karena ukuran, RequestSize pabrik mengatur status respons ke 413 Payload Too Large dengan header errorMessagelain .

Contoh berikut menunjukkan errorMessage:

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

TokenRelay

TokenRelay Pabrik meneruskan OAuth2 token akses ke sumber daya hilir. Filter ini dikonfigurasi sebagai boolean nilai dalam definisi rute daripada filter eksplisit.

Contoh berikut mengonfigurasi TokenRelay pabrik:

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

Menggunakan filter komersial

Spring Cloud Gateway untuk Kubernetes juga menyediakan banyak pabrik kustom GatewayFilter . Bagian berikut menjelaskan pabrik-pabrik ini.

AllowedRequestCookieCount

AllowedRequestCookieCount Pabrik menentukan apakah permintaan yang cocok diizinkan untuk melanjutkan berdasarkan jumlah cookie.

Pabrik ini menerima parameter konfigurasi berikut:

  • amount: Jumlah cookie yang diizinkan.

Contoh berikut mengonfigurasi AllowedRequestCookieCount pabrik:

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

AllowedRequestHeadersCount

AllowedRequestHeadersCount Pabrik menentukan apakah permintaan yang cocok diizinkan untuk melanjutkan berdasarkan jumlah header.

Pabrik ini menerima parameter konfigurasi berikut:

  • amount: Jumlah header yang diizinkan.

Contoh berikut mengonfigurasi AllowedRequestHeadersCount pabrik:

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

AllowedRequestQueryParamsCount

AllowedRequestQueryParamsCount Pabrik menentukan apakah permintaan yang cocok diizinkan untuk melanjutkan berdasarkan parameter kueri angka.

Pabrik ini menerima parameter konfigurasi berikut:

  • amount: Jumlah parameter yang diizinkan.

Contoh berikut mengonfigurasi AllowedRequestQueryParamsCount pabrik:

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

BasicAuth

Pabrik BasicAuth menambahkan BasicAuthAuthorization header ke permintaan.

Tidak ada parameter untuk pabrik ini.

Contoh berikut mengonfigurasi BasicAuth pabrik:

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

ClaimHeader

Pabrik ClaimHeader menyalin data dari klaim JWT ke header HTTP.

Pabrik ini menerima parameter konfigurasi berikut:

  • Claim name: Nama peka huruf besar/kecil klaim yang akan diteruskan.
  • Header name: Nama header HTTP.

Contoh berikut mengonfigurasi ClaimHeader pabrik:

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

ClientCertificateHeader

Pabrik ClientCertificateHeader memvalidasi X-Forwarded-Client-Cert sertifikat header.

Pabrik ini menerima parameter konfigurasi berikut:

  • domain pattern: Nilai X-Forwarded-Client-Cert sesuai dengan kemampuan Kubernetes untuk mengenali CA sertifikat klien.
  • certificate fingerprint(opsional): Sidik jari sertifikat TLS/SSL.

Contoh berikut mengonfigurasi ClientCertificateHeader pabrik:

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

Cors

Cors Pabrik mengaktifkan validasi CORS pada rute.

Pabrik ini menerima parameter konfigurasi berikut yang diatur sebagai pasangan kunci-nilai untuk opsi CORS:

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

Contoh berikut mengonfigurasi Cors pabrik:

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

JsonToXml

JsonToXml Pabrik mengubah isi respons JSON menjadi isi respons XML.

Pabrik ini menerima parameter konfigurasi berikut:

  • wrapper: Nama tag akar untuk respons XML jika tag akar lain diperlukan untuk menghasilkan XML yang valid. Nilai defaultnya adalah response.

Contoh berikut mengonfigurasi JsonToXml pabrik:

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

RateLimit

RateLimit Pabrik menentukan apakah permintaan yang cocok diizinkan untuk melanjutkan berdasarkan volume permintaan.

Pabrik ini menerima parameter konfigurasi berikut:

  • request limit: Jumlah maksimum permintaan yang diterima selama jendela.
  • window duration: Durasi jendela dalam milidetik. Atau, Anda dapat menggunakan akhiran s, m atau h untuk menentukan durasi dalam detik, menit, atau jam.
  • partition source (opsional): Lokasi kunci partisi (claim, , headeratau IPs).
  • partition key (opsional): Nilai yang digunakan untuk mempartisi penghitung permintaan.

Contoh berikut mengonfigurasi RateLimit pabrik:

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

Contoh berikut menunjukkan konfigurasi lain RateLimit :

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

RestrictRequestHeaders Pabrik menentukan apakah permintaan yang cocok diizinkan untuk melanjutkan berdasarkan header.

Jika ada header HTTP yang tidak berada dalam konfigurasi yang tidak peka huruf besar/kecil headerList , maka respons 431 Forbidden error dikembalikan ke klien.

Pabrik ini menerima parameter konfigurasi berikut:

  • headerList: Daftar nama header yang diizinkan tidak peka huruf besar/kecil.

Contoh berikut mengonfigurasi RestrictRequestHeaders pabrik:

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

RewriteAllResponseHeaders

Pabrik RewriteAllResponseHeaders menulis ulang beberapa header respons sekaligus.

Pabrik ini menerima parameter konfigurasi berikut:

  • pattern to match: Ekspresi reguler yang cocok dengan nilai header.
  • replacement: Nilai penggantian.

Contoh berikut mengonfigurasi RewriteAllResponseHeaders pabrik:

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

RewriteResponseBody

RewriteResponseBody Pabrik memodifikasi isi respons.

Pabrik ini menerima parameter konfigurasi berikut yang diatur sebagai daftar pasangan kunci-nilai yang dipisahkan koma, di mana setiap pasangan menerima formulir pattern to match:replacement:

  • pattern to match: Ekspresi reguler untuk mencocokkan dengan teks dalam isi respons.
  • replacement: Nilai penggantian.

Contoh berikut mengonfigurasi RewriteResponseBody pabrik:

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

RewriteJsonAttributesResponseBody

RewriteJsonAttributesResponseBody Pabrik menulis ulang atribut JSON menggunakan JSONPath notasi.

Pabrik ini menerima parameter konfigurasi berikut yang diatur sebagai daftar pasangan kunci-nilai yang dipisahkan koma, di mana setiap pasangan menerima formulir jsonpath:replacement:

  • jsonpath: Ekspresi JSONPath yang cocok dengan isi respons.
  • replacement: Nilai penggantian.

Contoh berikut mengonfigurasi RewriteJsonAttributesResponseBody pabrik:

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

Peran

Roles Pabrik mengotorisasi permintaan yang berisi salah satu peran yang dikonfigurasi.

Pabrik ini menerima parameter konfigurasi berikut:

  • roles: Daftar peran resmi yang dipisahkan koma.

Contoh berikut mengonfigurasi Roles pabrik:

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

Cakupan

Scopes Pabrik mengotorisasi permintaan yang berisi salah satu cakupan yang dikonfigurasiOAuth.

Pabrik ini menerima parameter konfigurasi berikut:

  • scopes: Daftar cakupan resmi yang dipisahkan OAuth koma.

Contoh berikut mengonfigurasi Scopes pabrik:

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

StoreIpAddress

StoreIPAddress Pabrik digunakan untuk pengembangan ekstensi saja dan dalam konteks aplikasi.

Pabrik ini menerima parameter konfigurasi berikut:

  • attribute name: Nama yang digunakan untuk menyimpan IP sebagai atribut pertukaran.

Contoh berikut mengonfigurasi StoreIPAddress pabrik:

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

Masuk SSO

SSO login Pabrik mengalihkan untuk mengautentikasi jika tidak ada token otorisasi yang valid. Pabrik ini dikonfigurasi sebagai boolean nilai dalam definisi rute daripada filter eksplisit.

Contoh berikut mengonfigurasi SSO login pabrik:

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

StoreHeader

Pabrik StoreHeader menyimpan nilai header dalam konteks aplikasi. Filter ini hanya digunakan untuk pengembangan ekstensi.

Pabrik ini menerima parameter konfigurasi berikut:

  • headers: Daftar header yang akan diperiksa. Yang pertama ditemukan digunakan.
  • attribute name: Nama yang digunakan untuk menyimpan nilai header sebagai atribut exchange.

Contoh berikut mengonfigurasi StoreHeader pabrik:

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

XmlToJson

XmlToJson Pabrik mengubah isi respons XML menjadi isi respons JSON.

Tidak ada parameter untuk pabrik ini.

Contoh berikut mengonfigurasi XmlToJson pabrik:

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

Langkah berikutnya