示例項(xiàng)目:https://github.com/14251104246/spring-cloud-gateway-demo/tree/Predicate
spring cloud gateway 通過謂詞(Predicate)來匹配來自用戶的請求
為了方便畜侦,使用postman測試不同的謂詞的效果
路徑謂詞(Predicate)—— 最簡單的謂詞
- 配置如下
spring:
cloud:
gateway:
routes:
# 匹配指定路徑的路由
- id: path_route
uri: http://www.baidu.com
predicates:
- Path=/baidu/**
filters:
- StripPrefix=1
-
Path
謂詞配置的- Path=/baidu/**
的作用是:匹配所有請求路徑以http://localhost:8888/baidu
開頭的用戶請求 - 用postman請求
http://localhost:8888/baidu
,返回百度網(wǎng)頁的HTML婆廊,效果如圖
image.png
cookie謂詞
- 配置如下
spring:
cloud:
gateway:
routes:
# 匹配指定cookie的路由
- id: cookie_route
uri: http://www.taobao.com
predicates:
- Cookie=chocolate, value
-
Cookie
謂詞配置的- Cookie=chocolate, value
的作用是:匹配請求中存在cookiechocolate=value
的所有請求- 注意:
- Cookie=chocolate, value
中的value
是正則表達(dá)式
- 注意:
- 用postman隨便請求一個url
http://localhost:8888/1111111
密强,只要存在cookiechocolate=value
汰蓉,都網(wǎng)關(guān)都會匹配到對應(yīng)路由近零,最后返回淘寶的HTML副砍,效果如圖
image.png
請求頭謂詞
- 配置如下
spring:
cloud:
gateway:
routes:
# 匹配指定請求頭的路由
- id: header_route
uri: http://www.jd.com/
predicates:
- Header=X-Request-Id, \d+
-
Header
謂詞配置的- Header=X-Request-Id, \d+
的作用是:匹配請求頭中存在符合條件“key為X-Request-Id坡倔,value為數(shù)字”的所有請求- 注意:
Header=X-Request-Id, \d+
漂佩,第二個參數(shù)是正則表達(dá)式,如\d+
- 注意:
- 用postman隨便請求一個url
http://localhost:8888/2222222
罪塔,只要請求頭中符合key為X-Request-Id投蝉,value為數(shù)字
,都網(wǎng)關(guān)都會匹配到對應(yīng)路由征堪,最后返回京東的HTML瘩缆,效果如圖
image.png
請求參數(shù)謂詞
- 配置如下
spring:
cloud:
gateway:
routes:
# 匹配指定請求參數(shù)的路由
- id: cookie_route
uri: http://tmall.com/
predicates:
- Query=param1,value
-
上面請求參數(shù)謂詞
- Query=param1,value
的含義是: 匹配所有含有請求參數(shù)param1
且它的值符合正則表達(dá)式value
的請求- 注意:
- Query=param1,value
中的value
是正則表達(dá)式 - 注意:
- Query=param1,value
中的value
可以省略- 即可變成
- Query=param1
,這是匹配所有請求參數(shù)含有param1
的請求并且不篩選值
- 即可變成
- 注意:
效果如下
image.png
其他謂詞
-
host
謂詞匹配對應(yīng)的host佃蚜,如下匹配www.somehost.org
或beta.somehost.org
等
spring:
cloud:
gateway:
routes:
- id: host_route
uri: http://example.org
predicates:
- Host=**.somehost.org
-
Method
方法謂詞匹配如get
庸娱,post
等請求的方法
spring:
cloud:
gateway:
routes:
- id: method_route
uri: http://example.org
predicates:
- Method=GET
-
RemoteAddr
為ip地址謂詞,匹配對應(yīng)ip地址
spring:
cloud:
gateway:
routes:
- id: remoteaddr_route
uri: http://example.org
predicates:
- RemoteAddr=192.168.1.1/24
-
After
谐算、Before
熟尉、Between
等時間謂詞,分別匹配在某時之后洲脂,之前斤儿,和某段時間內(nèi)的請求
謂詞組合
- 不同謂詞之間可以組合使用。它們同時存在于同一個路由時恐锦,請求必須同時滿足所有的謂詞條件才被這個路由匹配往果。
- 注意:一個請求滿足多個路由的謂詞條件時,請求只會被首個成功匹配的路由轉(zhuǎn)發(fā)
- 配置如下
spring:
cloud:
gateway:
routes:
# 匹配指定請求參數(shù)和請求頭的路由
- id: compose_route
uri: http://www.oschina.net/
predicates:
- Query=param2
- Header=Header-Route,value
- 效果如下
image.png