Spring Cloud Gateway内置的断言和过滤器作用及使用场景

news/2024/11/16 18:30:51/

文章目录

  • 前言
  • 一、内置断言
  • 二、内置过滤器
    • 1.GlobalFilter
    • 2.GatewayFilter
  • 三、配置参数解析模式
    • 1.DEFAULT
    • 2.GATHER_LIST
    • 3.GATHER_LIST_TAIL_FLAG


前言

对应解版本3.1.7对应SpringCloud版本2021.0.7

  <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId><version>3.1.7</version></dependency>

一、内置断言

  1. AfterRoutePredicateFactory
  • 作用:判断当请求时间是否在指定配置时间之后
  • 使用方式
    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]
    
  • 使用场景:当上线一新服务时在未来某个时间提供服务

两种配置方式的区别:
第一种便捷方式配置的值是按逗号分隔,再按shortcutFieldOrder方法返回的字段顺序最后绑定的配置对象上。
第二种配置方式即标准配置方式,会把整个map作为配置对象绑定源
区别就是第一种最多只会绑定指定的字段尽管可能配置类字段有其它字段!

  1. BeforeRoutePredicateFactory
  • 作用:与AfterRoutePredicateFactory正好相反,判断当请求时间是否在指定配置时间之前
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0]=Before=2019-04-20T17:42:47.789+08:00[Asia/Shanghai]
    
  • 使用场景:指定服务在指定时间以内访问
  1. BetweenRoutePredicateFactory
  • 作用:判断当请求时间是否在指定配置时间之间
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0].name=Between
    #在datetime1后面即请求时间大于该时间
    spring.cloud.gateway.routes[0].predicates[0].args.datetime1=2029-04-20T17:42:47.789+08:00[Asia/Shanghai]
    #在datetime2前面即请求时间小于该时间
    spring.cloud.gateway.routes[0].predicates[0].args.datetime2=2019-04-20T17:42:47.789+08:00[Asia/Shanghai]
    
  • 使用场景:指定服务在指定时间范围内访问
  1. CloudFoundryRouteServiceRoutePredicateFactory
  • 作用:判断请求是否针对 Cloud Foundry 路由服务(通过判断请求头中是否有X-CF-Forwarded-Url、X-CF-Proxy-Signature、X-CF-Proxy-Metadata这个三个配置)
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0]=CloudFoundryRouteService
    
  1. CookieRoutePredicateFactory
  • 作用:判断请求中cookie是否包含指定字段的以及对应的值是否符合指定的模式(正则表达式)
  • 使用方式
    # cookie中id的值必须是数字
    spring.cloud.gateway.routes[0].predicates[0]=Cookie=id, \\d+
    
  1. HeaderRoutePredicateFactory
  • 作用:判断请求头中是否包含指定字段的以及对应的值是否符合指定的模式(正则表达式)
  • 使用方式
    # header中X-Request-Id的值必须是数字
    spring.cloud.gateway.routes[0].predicates[0]=Header=X-Request-Id, \\d+
    
  1. HostRoutePredicateFactory
  • 作用:接收一个参数,主机名模式。判断请求的Host是否满足匹配规则
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0]=Host=api1.hiboot.cn,api2.hiboot.cn
    
  1. MethodRoutePredicateFactory
  • 作用:判断请求方法类型是否跟指定的类型匹配
  • 使用方式
    #指定路由只接受post和get请求
    spring.cloud.gateway.routes[0].predicates[0]=Method=POST,GET
    
  1. PathRoutePredicateFactory
  • 作用:判断请求的URI部分是否满足路径规则。使用PathContainer解析
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0]=Path=/web/**
    
  1. QueryRoutePredicateFactory
  • 作用: 判断请求参数(QueryParams)是否具有给定名称且值与正则表达式匹配
  • 使用方式
    #指定请求参数age必须是数字
    spring.cloud.gateway.routes[0].predicates[0]=Query=age,\\d+
    
  1. ReadBodyRoutePredicateFactory
  • 作用:读取请求体并缓存,后续调用谓词不需要再次反序列化
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0].name=ReadBody
    spring.cloud.gateway.routes[0].predicates[0].args.inClass=#{T(String)}
    spring.cloud.gateway.routes[0].predicates[0].args.predicate=#{@testRequestBody}
    
  1. RemoteAddrRoutePredicateFactory
  • 作用:判断请求访问者的地址是否在指定指定ip/mask内
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0]=RemoteAddr=192.168.1.0/24
    
    • 使用场景:配置服务只允许指定ip可访问
  1. WeightRoutePredicateFactory
  • 作用:接收一个[组名,权重], 然后对于同一个组内的路由按照权重转发
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0]=Weight=group1,1
    
  1. XForwardedRemoteAddrRoutePredicateFactory
  • 作用:判断是否允许根据“ X-Forward-For” HTTP标头过滤请求
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0]=XForwardedRemote=192.168.1.0/24,192.168.4.0/24
    
  • 使用场景:与反向代理一起使用,例如负载平衡器或Web应用程序防火墙仅当请求来自可信赖的IP地址列表时,才允许该请求反向代理。

二、内置过滤器

1.GlobalFilter

  1. RemoveCachedBodyFilter
  2. AdaptCachedBodyGlobalFilter
  3. NettyWriteResponseFilter
  4. GatewayMetricsFilter
  5. RouteToRequestUrlFilter
  6. ReactiveLoadBalancerClientFilter
  7. LoadBalancerServiceInstanceCookieFilter
  8. WebsocketRoutingFilter
  9. NettyRoutingFilter
  10. ForwardRoutingFilter

2.GatewayFilter

  1. AddRequestHeaderGatewayFilterFactory
  2. MapRequestHeaderGatewayFilterFactory
  3. AddRequestParameterGatewayFilterFactory
  4. AddResponseHeaderGatewayFilterFactory
  5. ModifyRequestBodyGatewayFilterFactory
  6. DedupeResponseHeaderGatewayFilterFactory
  7. ModifyResponseBodyGatewayFilterFactory
  8. CacheRequestBodyGatewayFilterFactory
  9. PrefixPathGatewayFilterFactory
  10. PreserveHostHeaderGatewayFilterFactory
  11. RedirectToGatewayFilterFactory
  12. RemoveRequestHeaderGatewayFilterFactory
  13. RemoveRequestParameterGatewayFilterFactory
  14. RemoveResponseHeaderGatewayFilterFactory
  15. RequestRateLimiterGatewayFilterFactory
  16. RewritePathGatewayFilterFactory
  17. RetryGatewayFilterFactory
  18. SetPathGatewayFilterFactory
  19. SecureHeadersGatewayFilterFactory
  20. SetRequestHeaderGatewayFilterFactory
  21. SetRequestHostHeaderGatewayFilterFactory
  22. SetResponseHeaderGatewayFilterFactory
  23. RewriteResponseHeaderGatewayFilterFactory
  24. RewriteLocationResponseHeaderGatewayFilterFactory
  25. SetStatusGatewayFilterFactory
  26. SaveSessionGatewayFilterFactory
  27. StripPrefixGatewayFilterFactory
  28. RequestHeaderToRequestUriGatewayFilterFactory
  29. RequestSizeGatewayFilterFactory
  30. RequestHeaderSizeGatewayFilterFactory

三、配置参数解析模式

1.DEFAULT

	配置的默认处理方式 :如果是便捷配置方式会根据接口中shortcutFieldOrder方法返回的字段顺序注入例如:spring.cloud.gateway.routes[1].predicates[2]=Header=X-Request-Id, \\d+,则会将Header=X-Request-Id设置name,\\d+设置给regex
	default List<String> shortcutFieldOrder() {return Arrays.asList("header", "regexp");}public static class Config {@NotEmptyprivate String header;private String regexp;...}

2.GATHER_LIST

该解析方式的条件必须是一个字段,将配置参数解析成集合
例如: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

该解析方式的条件必须是两个字段,前一个将配置参数解析成集合,后面一个必须要是Boolean类型数据
例如: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;...}

http://www.ppmy.cn/news/84000.html

相关文章

JOSEF约瑟 JDZY-1440 DC110V 静态中间继电器 导轨安装 常用于电力系统

名称&#xff1a;中间继电器&#xff1b;型号&#xff1a;JDZY-1440&#xff1b;品牌&#xff1a;JOSEF约瑟&#xff1b;额定电压&#xff1a;24,48,110,220VDC/AC380VAC&#xff1b;触点容量&#xff1a;250VAC/5A&#xff1b;功率消耗&#xff1a;2W/3.5W&#xff1b;返回时间…

Java——网络编程套接字

目录 一、网络编程基础 1.1 为什么需要网络编程&#xff1f;——丰富的网络资源 二、什么是网络编程? 三、网络编程中的基本概念 3.2 请求和响应 3.3 客户端和服务端 常见的客户端服务端模型 四、Socket套接字 五、通信模型 5.1 Java数据报套接字通信模型 5.2 Java流…

AI时代的数据革命,分布式融合存储为何堪当大任?

有人说&#xff0c;以ChatGPT为代表的人工智能应用的兴起标志着AI时代奇点来临。 诚然如斯。这一波AIGC浪潮来袭&#xff0c;让人们真正意识到AI给生产力带来的巨大飞跃。从今年起&#xff0c;AI大模型成为行业用户重点关注的对象&#xff0c;甚至金融、媒体、广告营销等用户纷…

Linux 学习笔记(九):基于 TSS 的进程切换

一、TSS 基本概念 1、什么是 TSS &#xff1f; TSS&#xff08;Task State Segment&#xff09;即任务状态段。具体的说&#xff0c;在设计 “Intel 架构”&#xff08;即 x86 系统结构&#xff09;时&#xff0c;每个任务&#xff08;进程or线程&#xff09;都对应有一个独立…

阿里4年测试经验分享 —— 测试外包干了3年后,我废了...

去年国庆&#xff0c;我分享了一次一位阿里朋友的技术生涯&#xff0c;大家反响爆蓬&#xff0c;感觉十分有意思&#xff0c;今天我来分享一下我另一位朋友的真实经历&#xff0c;是不是很想听&#xff1f; 没错&#xff0c;我这位朋友是曾经外包公司的测试开发&#xff0c;而…

Centos7 第一次正常连接, 隔天连接不上

记录现象: ping:www.baidu.com bash: ping:www.baidu.com: 未找到命令... 其他没有配置错的情况下 1. 原因 vi /etc/sysconfig/network-scripts/ifcfg-ens33 因为配置的静态链接所以 不需要NetworkManager 2. 解决方案 a. 关闭NetworkManager systemctl stop NetworkMa…

伙伴匹配系统学习---09

一、数据库表的设计 队伍表 team 字段: - id 主键 bigint(最简单、连续,放 url 上比较简短,但缺点是爬虫) - name 队伍名称 - description 描述 - maxNum 最大人数 - expireTime 过期时间 - userId 创建人 id - status 0 - 公开,1 - 私有,2 - 加密 - password…

成功拿到B站测开岗年薪50W+offer,面经分享

一面 首先&#xff0c;自我介绍&#xff0c;我介绍了自己的技术栈和项目。 技术栈提到过Spring、Redis、Kafka、Docker、K8s、大数据。 项目提到过接口和UI自动化。 我有个大数据平台项目&#xff0c;问了比较多&#xff0c;聊着聊着&#xff0c;提到自己研究过Selenium、T…