Keamanan, pembatasan arus: menyaring informasi ilegal di lapisan gateway
gerbang eksternal nginx, gerbang intranet
nginx dapat ditingkatkan dengan Lua atau Kong
konsep
id: nama sewenang-wenang
uri: Alamat layanan proxy. id dan uri wajib diisi, predikat dan filter bersifat opsional
Predikat: dapat digunakan untuk mencocokkan uri untuk mengakses gateway. Jika cocok, rute saat ini akan berlaku.
Filter: Sebuah instance dari GatewayFilter, menambahkan logika sebelum atau sesudah proksi, dengan fleksibilitas tertinggi
Aliran pemrosesan
Pertama, Pemetaan Handler memproses URL, dan kemudian menyerahkannya ke Web Handler. Ia memanggil bagian pertama dari filter untuk diproses. Setelah pemrosesan selesai, ia memanggil layanan proxy yang sebenarnya. Setelah layanan proxy merespons, ia menjalankan logika dari paruh kedua filter. Kembalikan hasilnya ke WebHandler, lalu ke HandlerMapping, dan terakhir ke klien
Jika elemen dalam daftar memiliki beberapa bidang, Anda memerlukan "-" dan titik dua untuk menentukan masing-masing bidang dan nilai; jika hanya ada satu bidang, Anda dapat menggunakan koma untuk memisahkannya.
Konfigurasi jenis objek, setiap bidang dapat dikonfigurasi melalui "-" dan titik dua
Jenis peta: kunci, nilai dipisahkan dengan titik dua
predicates:
- Path=/sendOrder
- Query=name,ma.
- name: Query
args:
param: id
regexp: d+
#predicates是List, 它的元素是
public class PredicateDefinition {
@NotNull
private String name;
private Map<String, String> args = new LinkedHashMap<>();}
等号分割转成对象的写法不是yml内置支持的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
predikat
Konfigurasi predikatnya adalah Daftar, yang elemennya dapat berupa string dalam format atau objek tertentu. Metode penulisan string: dipisahkan dengan tanda sama dengan, bagian pertama adalah nama nama predikat, bagian kedua args dipisahkan dengan koma, nilai disimpan ke dalam nilai Peta, dan kunci Peta dibuat secara otomatis. Metode penulisan objek: PredicateDefinition
Jika ada koma dan titik dua di args itu sendiri, format string tidak dapat digunakan
Metode shortcutType mendefinisikan metode penguraian parameter args ke ConfigClass. DEFAULT: shortcutFieldOrder menghapus awalan shortcutFieldPrefix dan sesuai dengan nama bidang ConfigClass : Daftar yang dipisahkan koma, tetapi yang terakhir Nilainya adalah nilai Boolean, yang pada akhirnya diubah menjadi Peta 2 kunci. Nilai kunci pertama adalah Daftar di depan nilai Boolean, dan kunci kedua adalah Nilai Boolean.
Digunakan untuk mencocokkan permintaan untuk mengakses gateway (seperti uri, parameter kueri, header permintaan). Jika cocok, rute saat ini akan berlaku.
Sesuai dengan implementasi GatewayPredicate, kelas implementasi dibuat oleh pabrik. Pabrik adalah kelas implementasi RoutePredicateFactory. Spesifikasi penamaan kelas implementasi adalah: nama predikat+RoutePredicateFactory.
Nama predikat sesuai dengan awalan nama kelas dari kelas implementasi pabrik, dan parameter predikat args sesuai dengan ConfigClass pabrik.
Predikat ganda adalahDanHubungan
Ketika predikat tidak lolos, gateway mengembalikan 404
Jalur
Mencocokkan jalur, mendukung pencocokan semut, dan mengekstrak uriVariable melalui {}
Pertanyaan
Apakah ada nama parameter permintaan http yang sesuai? Nilainya bisa biasa.
nama Kueri tetap, argumen memiliki 2 nilai, param dan regexp, sesuai dengan nama dan nilai parameter kueri
Jika hanya namanya saja yang dikonfigurasi, artinya selama parameter permintaan ada, maka akan diteruskan.
Judul
HeaderRutePredikatPabrik
Cocokkan nama dan nilai header permintaan. Anda hanya dapat mencocokkan nama. Nilai header permintaan sebenarnya mungkin lebih dari satu. Selama ada satu kecocokan, nilai konfigurasi mendukung ekspresi reguler.
metode
Cocok dengan metode permintaan HTTP. Konfigurasi harus menggunakan huruf besar dan dipisahkan dengan koma.
AlamatJarakJarakJauh
IP klien yang sesuai dengan permintaan, tepatnya IP proxy jaringan terakhir, bisa kelipatan, dipisahkan dengan koma
Tuan rumah
Cocok dengan nilai bagian host di header permintaan Host (tidak termasuk port). Dapat berupa kelipatan, dipisahkan dengan koma, dan dapat dicocokkan dengan semut.
Gunakan AntPathMatcher untuk mencocokkan, dan pemisah jalurnya adalah "."
Kue kering
Cocokkan nama dan nilai cookie. Nilainya dapat dicocokkan secara berkala.
Berat
Digunakan untuk penyeimbangan beban rute yang berbeda. Rute dalam grup yang sama dimuat berdasarkan beratnya.
Anda dapat mengonfigurasi 2 nilai, dipisahkan dengan koma, yaitu pengelompokan dan bobot.
WeightCalculatorWebFilter: Saat dimulai, Peta dua lapisan dibuat berdasarkan konfigurasi Bobot. Lapisan pertama adalah nama grup, dan lapisan kedua adalah ID perutean. Saat permintaan datang, nomor acak 0~1 dihasilkan, dan ID perutean dipilih untuk setiap grup.
WeightRoutePredicateFactory: Saat memfilter predikat, memfilter berdasarkan grup dan ID rute
Saring
Metode penulisan konfigurasi sama dengan predikat. Metode penulisan string: dibagi dengan tanda sama dengan. Bagian pertama sesuai dengan awalan nama kelas pabrik filter GatewayFilterFactory, dan bagian kedua adalah parameter.
Filter digunakan untuk mengubah permintaan dan tanggapan
TambahkanHeaderPermintaan
Tambahkan header permintaan, yang dapat diperoleh dari backend
Nilai header permintaan mendukung akuisisi dinamis dari uriVariables
Awalan Strip
Hanya ada satu nilai integer n. Setelah membagi jalur yang diminta dengan "/", hapus awalan n
Membatasi
Lintas domain
spring.cloud.gateway.globalcors:
cors-configurations:
'[/**]':#跨域的uriPattern
allowedHeaders: "*"
allowedOrigins: "*"
allowedMethods:
- POST
- OPTIONS
- GET
1
2
3
4
5
6
7
8
9
Server menentukan apakah ini permintaan lintas domain berdasarkan apakah header permintaan Asal dan skema, host, dan port URL permintaan sama. Selama ada satu perbedaan, itu adalah permintaan lintas domain.
Harus ada konfigurasi lintas-domain, dan uri yang diminta cocok dengan uriPattern dari konfigurasi lintas-domain. Gateway akan menentukan apakah itu lintas-domain. Jika itu lintas-domain, itu akan mengizinkan header permintaan lintas-domain. sumber, metode permintaan, dan permintaan aktual dalam konfigurasi lintas domain. Apakah header permintaan, sumber, dan metode permintaan cocok, jika semuanya cocok, jalankan akses lintas domain, jika tidak, kembalikan 403Forbiden
Mendukung perolehan ID layanan melalui penemuan layanan, dan secara otomatis menghasilkan konfigurasi perutean berdasarkan ID layanan.Uri konfigurasi perutean default adalah lb://serviceId, predikatnya adalah /serviceId/**, dan filternya adalah Rewritepath untuk menghapus serviceId.
penyaring global
FilterKlien Penyeimbang Beban Reaktif
Untuk memproses URI perutean dengan skema lb, pertama-tama dapatkan instance layanan sesuai dengan nama layanan melalui ServiceInstanceListSupplier, lalu muat saldo melalui instance ReactorLoadBalancer
FilterUrlPermintaanRuteKe
Lakukan 2 hal: 1. Dukung skema 2 lapis, simpan skema luar ke GATEWAY_SCHEME_PREFIX_ATTR, lalu hapus. 2. Gunakan skema bagian dalam, host, dan port untuk menggantikan URI sebenarnya yang diminta untuk mencapai penerusan.