Cara menggunakan filter rute VMware Spring Cloud Gateway dengan paket Azure Spring Apps Enterprise
Catatan
Paket Basic, Standard, dan Enterprise tidak digunakan lagi mulai pertengahan Maret 2025, dengan periode penghentian 3 tahun. Sebaiknya transisi ke Azure Container Apps. Untuk informasi selengkapnya, lihat pengumuman penghentian Azure Spring Apps.
Konsumsi Standar dan paket khusus akan ditolak mulai 30 September 2024, dengan pematian lengkap setelah enam bulan. Sebaiknya transisi ke Azure Container Apps. Untuk informasi selengkapnya, lihat Memigrasikan konsumsi Azure Spring Apps Standard dan paket khusus ke Azure Container Apps.
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
- Instans layanan paket Azure Spring Apps Enterprise yang sudah disediakan dengan Spring Cloud Gateway diaktifkan. Untuk informasi selengkapnya, lihat Mulai Cepat: Membuat dan menyebarkan aplikasi ke Azure Spring Apps menggunakan paket Enterprise.
- Azure CLI versi 2.0.67 atau yang lebih baru. Gunakan perintah berikut untuk menginstal ekstensi Azure Spring Apps:
az extension add --name spring
.
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 adalahRETAIN_FIRST
, ,RETAIN_LAST
danRETAIN_UNIQUE
. Nilai defaultnya adalahRETAIN_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 akhirans
durasi selama detik,m
untuk menit, atauh
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, seperti301
.url
: NilaiLocation
header. Harus berupa URI yang valid. Untuk pengalihan relatif, Anda harus menggunakanuri: 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 adalahfalse
.
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 adalaherrorMessage
.
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_REQUEST
danALWAYS_STRIP
. Nilai defaultnya adalahAS_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 bagianhost:port
header responsLocation
saat disediakan. Jika tidak disediakan, nilaiHost
header permintaan digunakan.protocolsRegex
: RegexString
yang valid , di mana nama protokol cocok. Jika tidak cocok, filter tidak berfungsi. Nilai defaultnya adalahhttp|https|ftp|ftps
.locationHeaderName
Daftar berikut mengonfigurasi RewriteLocationResponseHeader
pabrik:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RewriteLocationResponseHeader=AS_IN_REQUEST, Location, ,"
]
}
]
Dalam contoh ini, untuk nilai POST
api.example.com/some/object/name
permintaan , 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/blue
permintaan , 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=true
header , 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/blue
permintaan , 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 SpringHttpStatus
yang valid, yang dapat berupa nilai bilangan bulat seperti404
, atau representasi string enumerasi, sepertiNOT_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 menggunakanorg.springframework.http.HttpStatus
.methods
: Metode HTTP yang harus dicoba kembali, diwakili dengan menggunakanorg.springframework.http.HttpMethod
.series
: Rangkaian kode status yang akan dicoba kembali, diwakili dengan menggunakanorg.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 intervalfirstBackoff * (factor ^ n)
backoff , di manan
adalah iterasi. JikamaxBackoff
dikonfigurasi, backoff maksimum yang diterapkan terbatas padamaxBackoff
. JikabasedOnPreviousValue
benar,backoff
dihitung dengan menggunakanprevBackoff * factor
.
Default berikut dikonfigurasi untuk Retry
filter, saat diaktifkan:
retries
: tiga kali.series
: Seri 5XX.methods
: Metode GET.exceptions
:IOException
danTimeoutException
.backoff
: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:
maxSize
DataSize
: Jenis di mana nilai didefinisikan sebagai angka diikuti dengan akhiran opsionalDataUnit
sepertiKB
atauMB
. Nilai akhiran default adalahB
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 errorMessage
lain .
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 BasicAuth
Authorization
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
: NilaiX-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 adalahresponse
.
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 akhirans
,m
atauh
untuk menentukan durasi dalam detik, menit, atau jam.partition source
(opsional): Lokasi kunci partisi (claim
, ,header
atauIPs
).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
: EkspresiJSONPath
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 dipisahkanOAuth
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"
]
}
]