Spring Cloud Gateway內(nèi)置的斷言和過(guò)濾器作用說(shuō)明
前言
對(duì)應(yīng)版本3.1.7對(duì)應(yīng)SpringCloud版本2021.0.7
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>3.1.7</version> </dependency>
一、內(nèi)置斷言
1.AfterRoutePredicateFactory
作用:判斷當(dāng)請(qǐng)求時(shí)間是否在指定配置時(shí)間之后
使用方式
spring.cloud.gateway.routes[0].predicates[0]=After=2019-04-20T17:42:47.789+08:00[Asia/Shanghai] #也可以用下面的方式配置 #spring.cloud.gateway.routes[0].predicates[0].name=After #spring.cloud.gateway.routes[0].predicates[0].args.datetime=2019-04-20T17:42:47.789+08:00[Asia/Shanghai]
使用場(chǎng)景:當(dāng)上線一新服務(wù)時(shí)在未來(lái)某個(gè)時(shí)間提供服務(wù)
兩種配置方式的區(qū)別:
- 第一種便捷方式配置的值是按逗號(hào)分隔,再按shortcutFieldOrder方法返回的字段順序最后綁定的配置對(duì)象上。
- 第二種配置方式即標(biāo)準(zhǔn)配置方式,會(huì)把整個(gè)map作為配置對(duì)象綁定源
- 區(qū)別就是第一種最多只會(huì)綁定指定的字段盡管可能配置類字段有其它字段!
2.BeforeRoutePredicateFactory
作用:與AfterRoutePredicateFactory正好相反,判斷當(dāng)請(qǐng)求時(shí)間是否在指定配置時(shí)間之前
使用方式
spring.cloud.gateway.routes[0].predicates[0]=Before=2019-04-20T17:42:47.789+08:00[Asia/Shanghai]
使用場(chǎng)景:指定服務(wù)在指定時(shí)間以內(nèi)訪問(wèn)
3.BetweenRoutePredicateFactory
作用:判斷當(dāng)請(qǐng)求時(shí)間是否在指定配置時(shí)間之間
使用方式
spring.cloud.gateway.routes[0].predicates[0].name=Between #在datetime1后面即請(qǐng)求時(shí)間大于該時(shí)間 spring.cloud.gateway.routes[0].predicates[0].args.datetime1=2029-04-20T17:42:47.789+08:00[Asia/Shanghai] #在datetime2前面即請(qǐng)求時(shí)間小于該時(shí)間 spring.cloud.gateway.routes[0].predicates[0].args.datetime2=2019-04-20T17:42:47.789+08:00[Asia/Shanghai]
使用場(chǎng)景:指定服務(wù)在指定時(shí)間范圍內(nèi)訪問(wèn)
4.CloudFoundryRouteServiceRoutePredicateFactory
作用:判斷請(qǐng)求是否針對(duì) Cloud Foundry 路由服務(wù)(通過(guò)判斷請(qǐng)求頭中是否有X-CF-Forwarded-Url、X-CF-Proxy-Signature、X-CF-Proxy-Metadata這個(gè)三個(gè)配置)
使用方式
spring.cloud.gateway.routes[0].predicates[0]=CloudFoundryRouteService
5.CookieRoutePredicateFactory
作用:判斷請(qǐng)求中cookie是否包含指定字段的以及對(duì)應(yīng)的值是否符合指定的模式(正則表達(dá)式)
使用方式
# cookie中id的值必須是數(shù)字 spring.cloud.gateway.routes[0].predicates[0]=Cookie=id, \\d+
6.HeaderRoutePredicateFactory
作用:判斷請(qǐng)求頭中是否包含指定字段的以及對(duì)應(yīng)的值是否符合指定的模式(正則表達(dá)式)
使用方式
# header中X-Request-Id的值必須是數(shù)字 spring.cloud.gateway.routes[0].predicates[0]=Header=X-Request-Id, \\d+
7.HostRoutePredicateFactory
作用:接收一個(gè)參數(shù),主機(jī)名模式。判斷請(qǐng)求的Host是否滿足匹配規(guī)則
使用方式
spring.cloud.gateway.routes[0].predicates[0]=Host=api1.hiboot.cn,api2.hiboot.cn
8.MethodRoutePredicateFactory
作用:判斷請(qǐng)求方法類型是否跟指定的類型匹配
使用方式
#指定路由只接受post和get請(qǐng)求 spring.cloud.gateway.routes[0].predicates[0]=Method=POST,GET
9.PathRoutePredicateFactory
作用:判斷請(qǐng)求的URI部分是否滿足路徑規(guī)則。使用PathContainer解析
使用方式
spring.cloud.gateway.routes[0].predicates[0]=Path=/web/**
10.QueryRoutePredicateFactory
作用: 判斷請(qǐng)求參數(shù)(QueryParams)是否具有給定名稱且值與正則表達(dá)式匹配
使用方式
#指定請(qǐng)求參數(shù)age必須是數(shù)字 spring.cloud.gateway.routes[0].predicates[0]=Query=age,\\d+
11.ReadBodyRoutePredicateFactory
作用:讀取請(qǐng)求體并緩存,后續(xù)調(diào)用謂詞不需要再次反序列化
使用方式
spring.cloud.gateway.routes[0].predicates[0].name=ReadBody spring.cloud.gateway.routes[0].predicates[0].args.inClass=java.lang.String spring.cloud.gateway.routes[0].predicates[0].args.predicate=#{@testRequestBody}
12.RemoteAddrRoutePredicateFactory
作用:判斷請(qǐng)求訪問(wèn)者的地址是否在指定指定ip/mask內(nèi)
使用方式
spring.cloud.gateway.routes[0].predicates[0]=RemoteAddr=192.168.1.0/24
使用場(chǎng)景:配置服務(wù)只允許指定ip可訪問(wèn)
13.WeightRoutePredicateFactory
作用:接收一個(gè)[組名,權(quán)重], 然后對(duì)于同一個(gè)組內(nèi)的路由按照權(quán)重轉(zhuǎn)發(fā)
使用方式
spring.cloud.gateway.routes[0].predicates[0]=Weight=group1,1
14.XForwardedRemoteAddrRoutePredicateFactory
作用:判斷是否允許根據(jù)“ X-Forward-For” HTTP標(biāo)頭過(guò)濾請(qǐng)求
使用方式
spring.cloud.gateway.routes[0].predicates[0]=XForwardedRemote=192.168.1.0/24,192.168.4.0/24
使用場(chǎng)景:與反向代理一起使用,例如負(fù)載平衡器或Web應(yīng)用程序防火墻僅當(dāng)請(qǐng)求來(lái)自可信賴的IP地址列表時(shí),才允許該請(qǐng)求反向代理。
二、內(nèi)置過(guò)濾器
1.GlobalFilter
RemoveCachedBodyFilter
AdaptCachedBodyGlobalFilter
NettyWriteResponseFilter
GatewayMetricsFilter
RouteToRequestUrlFilter
ReactiveLoadBalancerClientFilter
LoadBalancerServiceInstanceCookieFilter
WebsocketRoutingFilter
NettyRoutingFilter
ForwardRoutingFilter
2.GatewayFilter
AddRequestHeaderGatewayFilterFactory
MapRequestHeaderGatewayFilterFactory
AddRequestParameterGatewayFilterFactory
AddResponseHeaderGatewayFilterFactory
ModifyRequestBodyGatewayFilterFactory
DedupeResponseHeaderGatewayFilterFactory
ModifyResponseBodyGatewayFilterFactory
CacheRequestBodyGatewayFilterFactory
PrefixPathGatewayFilterFactory
PreserveHostHeaderGatewayFilterFactory
RedirectToGatewayFilterFactory
RemoveRequestHeaderGatewayFilterFactory
RemoveRequestParameterGatewayFilterFactory
RemoveResponseHeaderGatewayFilterFactory
RequestRateLimiterGatewayFilterFactory
RewritePathGatewayFilterFactory
RetryGatewayFilterFactory
SetPathGatewayFilterFactory
SecureHeadersGatewayFilterFactory
SetRequestHeaderGatewayFilterFactory
SetRequestHostHeaderGatewayFilterFactory
SetResponseHeaderGatewayFilterFactory
RewriteResponseHeaderGatewayFilterFactory
RewriteLocationResponseHeaderGatewayFilterFactory
SetStatusGatewayFilterFactory
SaveSessionGatewayFilterFactory
StripPrefixGatewayFilterFactory
RequestHeaderToRequestUriGatewayFilterFactory
RequestSizeGatewayFilterFactory
RequestHeaderSizeGatewayFilterFactory
三、配置參數(shù)解析模式
1.DEFAULT
配置的默認(rèn)處理方式 :如果是便捷配置方式會(huì)根據(jù)接口中shortcutFieldOrder方法返回的字段順序注入
例如:spring.cloud.gateway.routes[1].predicates[2]=Header=X-Request-Id, \\d+,則會(huì)將Header=X-Request-Id設(shè)置name,\\d+設(shè)置給regex
default List<String> shortcutFieldOrder() { return Arrays.asList("header", "regexp"); } public static class Config { @NotEmpty private String header; private String regexp; ... }
2.GATHER_LIST
該解析方式的條件必須是一個(gè)字段,將配置參數(shù)解析成集合
例如:spring.cloud.gateway.routes[1].predicates[2]=Method=post,get
default List<String> shortcutFieldOrder() { return Arrays.asList("methods"); } public static class Config { private HttpMethod[] methods; public HttpMethod[] getMethods() { return methods; } public void setMethods(HttpMethod... methods) { this.methods = methods; } }
3.GATHER_LIST_TAIL_FLAG
該解析方式的條件必須是兩個(gè)字段,前一個(gè)將配置參數(shù)解析成集合,后面一個(gè)必須要是Boolean類型數(shù)據(jù)
例如:spring.cloud.gateway.routes[1].predicates[2]=Path=/web/**, false
default List<String> shortcutFieldOrder() { return Arrays.asList("patterns", "matchTrailingSlash"); } public static class Config { private List<String> patterns = new ArrayList<>(); private boolean matchTrailingSlash = true; ... }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Spring Cloud Gateway層限流實(shí)現(xiàn)過(guò)程
- Spring Cloud Gateway 緩存區(qū)異常問(wèn)題及解決方案
- spring cloud gateway中redis一直打印重連日志問(wèn)題及解決
- Spring?Cloud?Gateway?2.x跨域時(shí)出現(xiàn)重復(fù)Origin的BUG問(wèn)題
- SpringCloud-Gateway網(wǎng)關(guān)的使用實(shí)例教程
- 使用SpringCloud Gateway解決跨域問(wèn)題
- Spring Cloud Gateway組件的三種使用方式實(shí)例詳解
- 一文掌握spring cloud gateway(總結(jié)篇)
相關(guān)文章
java 替換docx文件中的字符串方法實(shí)現(xiàn)
這篇文章主要介紹了java 替換docx文件中的字符串方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02深入理解Java并發(fā)編程之LinkedBlockingQueue隊(duì)列
本文主要介紹了Java并發(fā)編程之LinkedBlockingQueue隊(duì)列,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04java+selenium實(shí)現(xiàn)自動(dòng)化打開(kāi)頁(yè)面的方法
今天小編就為大家分享一篇java+selenium實(shí)現(xiàn)自動(dòng)化打開(kāi)頁(yè)面的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05SpringBoot配置Redis連接池的實(shí)現(xiàn)步驟
本文主要介紹了SpringBoot配置Redis連接池的實(shí)現(xiàn)步驟,詳細(xì)的講解了連接池的作用、配置方式、連接池參數(shù)說(shuō)明,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03