Cơ chế xác định (Predicate) trong Gateway
Spring Gateway cung cấp nhiều phương thức xác định khác nhau để định tuyến yêu cầu.
Xác định After
After sẽ khớp với các yêu cầu xảy ra sau thời điểm hiện tại.
spring:
cloud:
gateway:
routes:
- id: route_after
uri: https://example.org
predicates:
- After=2023-01-15T10:30:00.000+07:00[Asia/Ho_Chi_Minh]
Xác định Before
Before sẽ khớp với các yêu cầu xảy ra trước thời điểm hiện tại.
spring:
cloud:
gateway:
routes:
- id: route_before
uri: https://example.org
predicates:
- Before=2023-01-15T10:30:00.000+07:00[Asia/Ho_Chi_Minh]
Xác định Between
Between sẽ khớp với các yêu cầu xảy ra trong khoảng thời gian giữa hai mốc thời gian.
spring:
cloud:
gateway:
routes:
- id: route_between
uri: https://example.org
predicates:
- Between=2023-01-15T10:30:00.000+07:00[Asia/Ho_Chi_Minh], 2023-01-16T10:30:00.000+07:00[Asia/Ho_Chi_Minh]
Xác định Cookie
Cookie khớp dựa trên tên và giá trị biểu thức chính quy của cookie.
spring:
cloud:
gateway:
routes:
- id: route_cookie
uri: https://example.org
predicates:
- Cookie=ten_dang_nhap, nguyen_van_a # ten_dang_nhap là tên cookie, nguyen_van_a là biểu thức chính quy cho giá trị
Xác định Header
Header khớp dựa trên tên và biểu thức chính quy của giá trị trong header yêu cầu.
spring:
cloud:
gateway:
routes:
- id: route_header
uri: https://example.org
predicates:
- Header=X-Request-ID, \d+ # X-Request-ID là tên header, \d+ là biểu thức chính quy cho giá trị
Xác định Host
Host thực hiện khớp tên miền theo mẫu Ant.
spring:
cloud:
gateway:
routes:
- id: route_host
uri: https://example.org
predicates:
- Host=**.mohost.org,**.khacnha.org
Xác định Method
Method khớp với phương thức HTTP.
spring:
cloud:
gateway:
routes:
- id: route_method
uri: https://example.org
predicates:
- Method=GET,POST
Xác định Path
Path thực hiện khớp đường dẫn.
spring:
cloud:
gateway:
routes:
- id: route_path
uri: https://example.org
predicates:
- Path=/dau/{phan},/cuoi/{phan}
Xác định Query
Query khớp với tham số truy vấn.
spring:
cloud:
gateway:
routes:
- id: route_query
uri: https://example.org
predicates:
- Query=thamso, ba. # Nếu tham số truy vấn là thamso và giá trị khớp biểu thức ba.
Xác định ReadBody
ReadBody cho phép đọc và kiểm tra nội dung body của yêu cầu.
Xác định RemoteAddr
RemoteAddr khớp với địa chỉ từ xa.
spring:
cloud:
gateway:
routes:
- id: route_remote
uri: https://example.org
predicates:
- RemoteAddr=192.168.1.0/24
Xác định Weight
Weight xác định dựa trên trọng số, nhận hai tham số nhóm và trọng số. Trọng số được tính theo nhóm.
spring:
cloud:
gateway:
routes:
- id: route_nhom_cao
uri: https://nhomcao.org
predicates:
- Weight=nhom1, 8
- id: route_nhom_thap
uri: https://nhomthap.org
predicates:
- Weight=nhom1, 2 # nhom1 là tên nhóm, 80% yêu cầu sẽ truy cập https://nhomcao.org, 20% sẽ truy cập https://nhomthap.org
Xác định CloudFoundryRouteService
CloudFoundryRouteService dành cho môi trường Cloud Foundry.
Cách cấu hình
Có hai cách cấu hình xác định trong gateway:
Lấy xác định Cookie làm ví dụ, lớp cấu hình như sau:
public static class CauHinh {
@NotEmpty
private String ten;
@NotEmpty
private String bieuThucChinhQuy;
public String getTen() {
return ten;
}
public CauHinh setTen(String ten) {
this.ten = ten;
return this;
}
public String getBieuThucChinhQuy() {
return bieuThucChinhQuy;
}
public CauHinh setBieuThucChinhQuy(String bieuThucChinhQuy) {
this.bieuThucChinhQuy = bieuThucChinhQuy;
return this;
}
}
- Cấu hình rút gọn
Giữa tên xác định và tham số là =, nhiều tham số cách nhau bởi ,, gán giá trị theo thứ tự định nghĩa
spring:
cloud:
gateway:
routes:
- id: route_cookie
uri: https://example.org
predicates:
- Cookie=cookie_cua_toi,giatri_cookie
- Cấu hình đầy đủ
Mỗi tham số sử dụng ten_tham_so:gia_tri để biểu thị
spring:
cloud:
gateway:
routes:
- id: route_cookie
uri: https://example.org
predicates:
- name: Cookie
args:
ten: cookie_cua_toi
bieuThucChinhQuy: giatri_cookie