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
RemoveCachedBodyFilterAdaptCachedBodyGlobalFilterNettyWriteResponseFilterGatewayMetricsFilterRouteToRequestUrlFilterReactiveLoadBalancerClientFilterLoadBalancerServiceInstanceCookieFilterWebsocketRoutingFilterNettyRoutingFilterForwardRoutingFilter
2.GatewayFilter
AddRequestHeaderGatewayFilterFactoryMapRequestHeaderGatewayFilterFactoryAddRequestParameterGatewayFilterFactoryAddResponseHeaderGatewayFilterFactoryModifyRequestBodyGatewayFilterFactoryDedupeResponseHeaderGatewayFilterFactoryModifyResponseBodyGatewayFilterFactoryCacheRequestBodyGatewayFilterFactoryPrefixPathGatewayFilterFactoryPreserveHostHeaderGatewayFilterFactoryRedirectToGatewayFilterFactoryRemoveRequestHeaderGatewayFilterFactoryRemoveRequestParameterGatewayFilterFactoryRemoveResponseHeaderGatewayFilterFactoryRequestRateLimiterGatewayFilterFactoryRewritePathGatewayFilterFactoryRetryGatewayFilterFactorySetPathGatewayFilterFactorySecureHeadersGatewayFilterFactorySetRequestHeaderGatewayFilterFactorySetRequestHostHeaderGatewayFilterFactorySetResponseHeaderGatewayFilterFactoryRewriteResponseHeaderGatewayFilterFactoryRewriteLocationResponseHeaderGatewayFilterFactorySetStatusGatewayFilterFactorySaveSessionGatewayFilterFactoryStripPrefixGatewayFilterFactoryRequestHeaderToRequestUriGatewayFilterFactoryRequestSizeGatewayFilterFactoryRequestHeaderSizeGatewayFilterFactory
三、配置參數(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-04
java+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-05
SpringBoot配置Redis連接池的實(shí)現(xiàn)步驟
本文主要介紹了SpringBoot配置Redis連接池的實(shí)現(xiàn)步驟,詳細(xì)的講解了連接池的作用、配置方式、連接池參數(shù)說(shuō)明,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03

