一、閘道器第一步:斷言->斷言工廠
路由斷言【Route Predicate】、斷言工廠【Route Predicate Factory】
什麼是路由斷言?
判斷一個路由斷言是否符合條件,符合則轉發到路由的目的地
我們在配置檔案中寫的斷言規則只是字串,這些字串會被斷言工廠(Route Predicate Factory)讀取並處理,轉換為路由判斷的條件
當請求到來的時候,首先交給路由斷言工廠進行處理,如果命中斷言工廠,則執行下一步,否則返回錯誤資訊
什麼是路由斷言工廠?
讀取使用者配置的斷言規則,並把它解析成判斷條件,並作出判斷
像這樣的斷言工廠在SpringCloudGateway有十幾個,每一個都有自己的判斷條件
用的最多的斷言工廠是Path,根據路徑進行判斷
這個的含義是對請求路徑做判斷,只要路徑的開頭是這個,就符合條件
他會根據配置檔案中的路由規則挨邊找,直到找到符合(放行)的或者沒有符合的為止(報錯404),在做相關的判斷!
二、路由中的過濾器GatewayFilter
GatewayFilter是閘道器中提供的一種過濾器,可以對閘道器的請求以及微服務的響應做處理:
具體使用哪個路由過濾工廠,到時候可以檢視微服務的原始碼查詢使用方法!配置案例如下
配置預設路由過濾器:對所有請求都生效!
全域性過濾器GlobalFilter:作用和GatewayFilter的作用一樣,處理一切進入閘道器的請求和微服務響應,但是它需要自己寫程式碼實現,不像GatewayFilter一樣直接配置就行,優點在於:處理邏輯可以根據需求調整
ps:交給下一個過濾器處理是一個過濾鏈
三、過濾器的執行順序
四、閘道器的跨域處理
跨域情況:瀏覽器禁止請求的發起者與服務端發生的ajax請求,請求被瀏覽器攔截的問題