Pabrik filter bawaan
Berikut adalah tabel sederhana dari semua pabrik filter yang dibangun ke dalam Spring Cloud Gateway, yang tidak terlalu detail, tetapi dapat digunakan sebagai ikhtisar cepat. Sebagai berikut:
Pabrik filter | fungsi | Parameter | AddRequestHeader | Menambahkan Header ke permintaan asli | Nama dan nilai header | AddRequestParameter | Menambahkan parameter permintaan ke permintaan asli | Nama dan nilai parameter | AddResponseHeader | Menambahkan header ke respons asli | Nama dan nilai header | DedupeResponseHeader | Menolak nilai duplikat dalam header respons | Nama header dan strategi deduplikasi yang perlu dideduplikasi | Hystrix | Perkenalkan perlindungan pemutus sirkuit Hystrix untuk rute tersebut | Nama HystrixCommand | Header Fallback | Tambahkan informasi pengecualian spesifik ke header permintaan fallbackUri | Nama header | PrefixPath | Menambahkan awalan ke jalur permintaan asli | Jalur awalan | PreserveHostHeader | Tambahkan properti preserveHostHeader=true ke permintaan, yang diperiksa oleh filter perutean untuk memutuskan apakah Anda ingin mengirim Host asli | tidak | RequestRateLimiter | Digunakan untuk membatasi permintaan, algoritma pembatasan adalah bucket token | keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus | Pengalihan ke | Mengalihkan permintaan asli ke URL yang ditentukan | Kode status HTTP dan URL pengalihan | RemoveHopByHopHeadersFilter | Hapus serangkaian header yang ditentukan oleh organisasi IETF untuk permintaan asli | Ini diaktifkan secara default, dan Anda dapat menentukan header mana yang hanya akan dihapus melalui konfigurasi | RemoveRequestHeader | Menghapus header untuk permintaan asli | Nama header | RemoveResponseHeader | Menghapus header untuk respons asli | Nama header | Jalur Tulis Ulang | Tulis ulang jalur permintaan asli | Regex jalur asli dan regex jalur yang ditulis ulang | RewriteResponseHeader | Menulis ulang header dalam respons asli | Nama header, ekspresi nilai reguler, nilai yang ditulis ulang | Simpan Sesi | Terapkan operasi WebSession::save sebelum meneruskan permintaan | tidak | secureHeaders | Tambahkan serangkaian header respons yang bertindak sebagai keamanan ke respons asli | Tidak ada, Anda dapat memodifikasi nilai header respons keamanan ini | SetPath | Mengubah jalur permintaan asli | Jalur yang dimodifikasi | SetResponseHeader | Mengubah nilai header dalam respons asli | Nama header, nilai yang dimodifikasi | SetStatus | Mengubah kode status respons asli | Kode status HTTP, yang dapat berupa angka atau string | Awalan Strip | Digunakan untuk memotong jalur permintaan asli | Gunakan angka untuk menunjukkan jumlah jalur yang akan dipotong | Pengulangan | Coba lagi untuk respons yang berbeda | percobaan ulang、status、metode、seri | Ukuran Permintaan | Atur ukuran paket maksimum yang diminta yang diizinkan untuk diterima. Jika ukuran paket permintaan melebihi nilai yang ditetapkan, 413 Payload Too Large akan dikembalikan | Ukuran paket permintaan dalam byte dan nilai defaultnya adalah 5 juta | ModifyRequestBody | Ubah konten isi permintaan asli sebelum meneruskan permintaan | Konten isi permintaan yang dimodifikasi | ModifyResponseBody | Memodifikasi konten isi respons asli | Konten isi respons yang dimodifikasi | Default | Menambahkan filter untuk semua rute | Memfilter nama dan nilai pabrik |
Tips: Setiap pabrik filter sesuai dengan kelas implementasi, dan iniNama kelas harus diakhiri dengan GatewayFilterFactoryIni adalah konvensi Spring Cloud Gateway, misalnya, kelas implementasi yang sesuai dengan AddRequestHeader adalah AddRequestHeaderGatewayFilterFactory. Teman yang tertarik dengan kode sumber dapat menyambungkan nama kelas tertentu sesuai dengan aturan ini untuk menemukan kode implementasi pabrik filter bawaan ini.
1、AddRequestHeader GatewayFilter Factory
Tambahkan header ke permintaan asli, contoh konfigurasi:
Menambahkan header permintaan bernama X-Request-Foo dengan nilai Bar ke permintaan asli
2、AddRequestParameter GatewayFilter Factory
Tambahkan parameter dan nilai permintaan ke permintaan asli, contoh konfigurasi:
Tambahkan parameter bernama foo dengan nilai bar ke permintaan asli, yaitu: foo=bar
3 、 Pabrik Filter GatewayHeader AddResponseHeader
Tambahkan header ke respons asli, contoh konfigurasi:
Tambahkan header respons bernama X-Request-Foo dengan nilai Bar ke respons asli
4、DedupeResponseHeader GatewayFilter Factory
DedupeResponseHeader dapat menghapus nilai duplikat dalam header respons berdasarkan nama header yang dikonfigurasi dan kebijakan deduplikasi, yang merupakan fitur baru yang disediakan oleh Spring Cloud Greenwich SR2 dan tidak dapat digunakan di bawah versi ini.
KamiJika Header CORS (Memecahkan Lintas Domain) diatur pada Gateway dan layanan mikro, jika tidak ada konfigurasi yang dibuat, maka nilai Header CORS diperoleh dengan meminta layanan mikro -> Gateway ->, akan seperti ini:
Anda dapat melihat bahwa nilai kedua Header ini diduplikasi, jika Anda ingin mendeduplikasi nilai kedua Header ini, Anda perlu menggunakan DedupeResponseHeader, contoh konfigurasi:
Strategi Deduplikasi:
- RETAIN_FIRST: Default, pertahankan nilai pertama
- RETAIN_LAST: Pertahankan nilai terakhir
- RETAIN_UNIQUE: Simpan semua nilai unik dalam urutan kemunculannya pertama kali
Jika Anda ingin memiliki pemahaman yang lebih komprehensif tentang pabrik filter, disarankan untuk membaca kode sumber pabrik filter, karena kode sumber memiliki catatan dan contoh terperinci, yang lebih baik daripada dokumentasi resmi: org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory
5、Pabrik Filter Gateway Hystrix
Memperkenalkan perlindungan pemutus sirkuit Hystrix untuk rute, contoh konfigurasi:
Hystrix adalah generasi pertama komponen Spring Cloud yang toleran terhadap kesalahan, tetapi telah memasuki mode pemeliharaan, dan Hystrix akan dihapus oleh Spring Cloud di masa mendatang, digantikan oleh Alibaba Sentinel/Resilience4J. Jadi artikel ini tidak akan membahas secara detail, jika Anda tertarik, Anda dapat merujuk ke dokumentasi resmi: Hystrix GatewayFilter Factory
6 、 FallbackHeaders GatewayFilter Factory
Juga mendukung Hystrix, pabrik filter yang dijelaskan di bagian sebelumnya mendukung parameter konfigurasi: fallbackUri, yang digunakan untuk meneruskan permintaan ke URI tertentu saat pengecualian terjadi. Pabrik filter FallbackHeaders dapat menambahkan header saat meneruskan permintaan ke URI, dan nilai header ini adalah informasi pengecualian tertentu. Contoh konfigurasi:
Saya tidak akan membahas secara rinci di sini, jika Anda tertarik, Anda dapat merujuk ke dokumentasi resmi: FallbackHeaders GatewayFilter Factory
7、Pabrik Filter GatewayGateway PrefixPath
Tambahkan jalur awalan ke jalur permintaan asli, contoh konfigurasi:
Konfigurasi ini membuat kunjungan ke ${GATEWAY_URL}/hello diteruskan kehttps://example.org/mypath/hello
8 、 PreserveHostHeader GatewayFilter Factory
Tambahkan properti preserveHostHeader=true ke permintaan, yang diperiksa oleh filter perutean untuk memutuskan apakah akan mengirim Header Host asli. Contoh konfigurasi:
Jika tidak diatur, maka header bernama Host akan dikendalikan oleh Klien Http
9、RequestRateLimiter GatewayFilter Factory
Ini digunakan untuk membatasi permintaan, dan algoritma pembatasan adalah bucket token. Contoh konfigurasi:
10、Pengalihan ke Pabrik GatewayFilter
Mengalihkan permintaan asli ke URL yang ditentukan, contoh konfigurasi:
Konfigurasi ini membuat akses ke ${GATEWAY_URL}/hello dialihkan ke https://acme.org/hello , dan membawa satuLocation:http://acme.orgHeader, sedangkan kode status HTTP yang mengembalikan klien adalah 302
Catatan:
Kode status HTTP harus 3xx, misalnya 301
URL harus berupa URL yang sah yang berfungsi sebagai nilai Header Lokasi
11、RemoveHopByHopHeadersFilter GatewayFilter Factory
Untuk permintaan asli untuk menghapus serangkaian header yang ditentukan oleh organisasi IETF, header default yang dihapus adalah sebagai berikut:
- Sambungan
- Tetap Hidup
- Proksi-Autentikasi
- Otorisasi Proksi
- TE
- Trailer
- Pengkodean Transfer
- Upgrade
Anda dapat menentukan header mana yang hanya dihapus melalui konfigurasi, contoh konfigurasi:
12、RemoveRequestHeader GatewayFilter Factory
Untuk menghapus header untuk permintaan asli, konfigurasikan contoh:
Hapus header permintaan bernama X-Request-Foo dari permintaan asli
13、RemoveResponseHeader GatewayFilter Factory
Untuk menghapus header respons asli, konfigurasikan contoh:
Hapus header respons bernama X-Request-Foo dari respons asli
14、Pabrik Filter Gateway Tulis Ulang Jalur
Mengganti jalur permintaan asli dengan ekspresi reguler, contoh konfigurasi:
Konfigurasi ini memungkinkan akses ke /foo/bar untuk menulis ulang jalur ke /bar dan meneruskannya, yaitu diteruskan ke https://example.org/bar。 Perhatikan bahwa karena sintaks YAML, $\ perlu digunakan alih-alih $
15、RewriteResponseHeaderGatewayFilter Factory
Tulis ulang header dalam respons asli, contoh konfigurasi:
Signifikansi dari konfigurasi ini adalah jika nilai X-Response-Foo dalam header respons adalah /42?user=ford&password=omg!what&flag=true, maka itu akan ditulis ulang menjadi /42?user=ford&password=***&flag=true sesuai dengan nilai yang dikonfigurasi, yaitu password=omg!what akan ditulis ulang ke password=***
16、SaveSession GatewayFilter Factory
Sebelum meneruskan permintaan, terapkan operasi WebSession::save, contoh konfigurasi:
Ini terutama digunakan untuk penyimpanan data yang ditangguhkan (data tidak segera dipertahankan) seperti Sesi Musim Semi, dan ingin memastikan bahwa status sesi disimpan sebelum permintaan diteruskan. Jika Anda mengintegrasikan Spring Secutiry ke dalam Spring Session dan ingin memastikan bahwa semua informasi keamanan dikirimkan ke mesin hilir, Anda perlu mengonfigurasi filter ini.
17、secureHeaders GatewayFilter Factory
Pabrik filter secureHeaders terutama didasarkan pada rekomendasi di blog ini, menambahkan serangkaian header respons yang memainkan peran keamanan dalam respons asli. Secara default, Header berikut (termasuk nilai) ditambahkan:
- X-Xss-Protection:1; mode=block
- Strict-Transport-Security:max-age=631138519
- X-Frame-Options:DENY
- X-Content-Type-Options:nosniff
- Referrer-Policy:no-referrer
- Content-Security-Policy:default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'
- X-Download-Options:noopen
- X-Permitted-Cross-Domain-Policies:none
Jika Anda ingin memodifikasi nilai Header ini, maka Anda perlu menggunakan akhiran yang sesuai dari Header ini, sebagai berikut:
- header-perlindungan xss
- keamanan transportasi yang ketat
- opsi bingkai
- opsi-jenis-konten
- kebijakan perujuk
- kebijakan keamanan konten
- opsi unduhan
- kebijakan lintas-domain yang diizinkan
Contoh konfigurasi:
Jika Anda ingin menonaktifkan header tertentu, Anda dapat menggunakan konfigurasi berikut:
18、Pabrik SetPath GatewayFilter
Ubah jalur permintaan asli dan konfigurasikan contoh:
Konfigurasi ini membuatnya diteruskan ke ${GATEWAY_URL}/foo/bar saat diakseshttps://example.org/bar , yaitu, /foo/bar asli diubah menjadi /bar
19、SetResponseHeader GatewayFilter Factory
Ubah nilai header dalam respons asli, konfigurasikan contoh:
Mengubah nilai X-Response-Foo dalam respons asli ke Bar
20、Pabrik SetStatus GatewayFilter
Ubah kode status respons asli, contoh konfigurasi:
Nilai SetStatusd dapat berupa angka atau string. Tetapi itu harus berupa nilai dalam kelas pencacahan Spring HttpStatus. Kedua konfigurasi di atas dapat mengembalikan kode status HTTP 401.
21、StripPrefix GatewayFilter Pabrik
Untuk memotong jalur permintaan asli, contoh konfigurasi:
Seperti yang ditunjukkan pada konfigurasi di atas, jika jalur yang diminta adalah /name/bar/foo, maka akan dipotong ke /foo dan diteruskan, yaitu 2 jalur akan dipotong.
22、Coba Kembali Pabrik GatewayFilter
Coba lagi untuk respons yang berbeda, misalnya untuk kode status HTTP, contoh konfigurasi:
Parameter berikut dapat dikonfigurasi:
- percobaan ulang: Jumlah percobaan ulang
- statuses: Kode status yang perlu dicoba ulang, diatur di org.springframework.http.HttpStatus
- methods: Metode permintaan yang perlu dicoba ulang, dengan nilai di org.springframework.http.HttpHttpMethod
- series:HTTP urutan kode status, dengan nilai di org.springframework.http.HttpStatus.Series
23、Pabrik FilterGateway Ukuran Permintaan
Atur ukuran paket permintaan maksimum yang diizinkan untuk diterima, contoh konfigurasi:
Jika ukuran paket permintaan melebihi nilai yang ditetapkan, 413 Payload Terlalu Besar akan ditampilkan bersama dengan errorMessage
24、Modifikasi Permintaan Pabrik Filter Gateway Tubuh
Ubah konten isi permintaan asli sebelum meneruskan permintaan, pabrik filter hanya dapat dikonfigurasi berdasarkan kode, bukan dalam file konfigurasi. Contoh kode:
Tips: Pabrik filter ini dalam status BETA, dan API dapat berubah di masa mendatang.Harap gunakan lingkungan produksi dengan hati-hati
25、Modifikasi Pabrik Filter Gateway Tubuh Respons
Pabrik filter juga dapat digunakan untuk memodifikasi konten isi respons asli, dan pabrik filter hanya dapat dikonfigurasi dengan kode, bukan dalam file konfigurasi. Contoh kode:
Tips: Pabrik filter ini dalam status BETA, API dapat berubah di masa mendatang, harap gunakan dengan hati-hati di lingkungan produksi
26、Filter Default
Filter Default digunakan untuk menambahkan pabrik filter ke semua rute, yaitu, untuk lulusPabrik filter yang dikonfigurasi oleh Filter Default akan berlaku untuk semua rute。 Contoh konfigurasi:
(Akhir)
|