Spring Cloud Gateway内置的断言和过滤器作用

news/2024/11/30 0:38:27/

文章目录

  • 前言
  • 一、内置断言
  • 二、内置过滤器
    • 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=java.lang.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/102011.html

相关文章

Word控件Spire.Doc 【其他】教程(3):使用 Marco 加载 Word 、删除 Marco

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

CG-3D渲染器-0.1

引言 在学习GAMES101的路上&#xff0c;我总是会心血来潮&#xff0c;想要做出一个3D渲染器。所谓3D渲染器&#xff0c;就是可以加载模型&#xff0c;并且通过调整参数来渲染出不同的视觉效果。最近看视频看到了第9课&#xff0c;想着做个作业&#xff0c;于是通过作业1接触到…

ChatGPT免费国内在线直连入口,2023持续分享中

这个国内在线版ChatGPT可以提供与OpenAI官方ChatGPT相同的使用效果&#xff0c;让你在不懂技术的情况下轻松接触人工智能。 国内镜像&#xff1a; ChatGPT国内直连版&#xff08;点我&#xff09;http://test.ai111.top 随着OpenAI不断推出更新版本&#xff0c;现在GPT3.5和…

JS的迭代器是啥?精读JS迭代器

目录 前言 概念 优点 用法 对象迭代能力 为什么对象没有迭代器 迭代器的实现 生成器 基础语法 生成器传参 生成器委托 可终止迭代器 总结 前言 在ES6中引入了迭代器的概念&#xff0c;它是一种遍历数据集合的机制&#xff0c;提供了一种简单而一致的方式来访问集…

C#开发的OpenRA游戏之基地工程车移动6

通过前面分析可知,基地工程车的移动是需要采用一种算法来计算路径,这种计算路径的算法叫做A*。如果对这个算法不熟悉,是没有办法把它的代码看懂的,所以我们要先来补一下这个算法内容,了解它为什么需要这样设计。 可以看到下面这段代码: /// <summary> /// Default…

面试:Webpack的核心概念

基本概念 Entry&#xff1a;入口&#xff0c;Webpack 执行构建的第一步将从 Entry 开始&#xff0c;可抽象成输入。Module&#xff1a;模块&#xff0c;在 Webpack 里一切皆模块&#xff0c;一个模块对应着一个文件。Webpack 会从配置的 Entry 开始递归找出所有依赖的模块。Chu…

Windows下的 SOCKS5 代理及网络安全性分析

本文将介绍在 Windows 操作系统下使用 SOCKS5 代理的方法&#xff0c;并探讨了它在网络安全中的应用。通过阐述 SOCKS5 的工作原理以及配置方法&#xff0c;读者将能够了解如何在 Windows 环境下实现安全的网络通信。此外&#xff0c;我们还将讨论 SOCKS5 代理在提高隐私保护和…

[论文阅读72]Parameter-Efficient Transfer Learning for NLP

1. 基本信息 题目论文作者与单位来源年份Parameter-Efficient Transfer Learning for NLPNeil Houlsby等Google Research&#xff0c;雅盖隆大学-波兰PMLR2019 Houlsby N, Giurgiu A, Jastrzebski S, et al. Parameter-efficient transfer learning for NLP[C]//Internationa…