文章目录

  • 前言
  • 一、内置断言
  • 二、内置过滤器
    • 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;...}

Spring Cloud Gateway内置的断言和过滤器作用相关推荐

  1. Spring Cloud Gateway内置过滤器实战——AddResponseHeader过滤器工厂

    一 代码位置 https://github.com/cakin24/spring-cloud-code/tree/master/ch17-3/ch17-3-4-gateway https://gith ...

  2. 青柠开车Spring Cloud(五) —— spring cloud的窗口zuul(路由和过滤器)

    项目源码github地址 什么是zuul 快速入门 zuul项目基本配置 将zuul加入eureka-server中,实现高可用 什么是zuul zuul在之前我举得例子中,担任的是警察的角色.准确的 ...

  3. 网关Spring Cloud Gateway科普

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"获取公众号专属群聊入口 欢迎跳转到本文的原文链接:https://honeypp ...

  4. Spring cloud gateway 详解和配置使用

    spring cloud gateway 介绍 1. 网关是怎么演化来的 单体应用拆分成多个服务后,对外需要一个统一入口,解耦客户端与内部服务 注:图片来自网络 2. 网关的基本功能 网关核心功能是路 ...

  5. Spring Cloud Gateway之Predict篇

    Spring Cloud gateway工作流程 在之前的文章的Spring Cloud GateWay初体验中,大家已经对Spring Cloud Gateway的功能有一个初步的认识,网关作为一个 ...

  6. Spring Cloud Gateway 之Predict篇

    转载请标明出处: http://blog.csdn.net/forezp/article/details/84926662 本文出自方志朋的博客 个人博客纯净版:https://www.fangzhi ...

  7. 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探

    SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...

  8. spring cloud gateway之filter篇

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 在上一篇文章详细的介绍了Gateway的Predict,Predict决定了请求由哪一个路由处理, ...

  9. java版电子商务spring cloud分布式微服务b2b2c社交电商-spring cloud gateway之filter篇

    社交电商平台源码请加企鹅求求:一零三八七七四六二六.filter的作用和生命周期 由filter工作流程点,可以知道filter有着非常重要的作用,在"pre"类型的过滤器可以做参 ...

最新文章

  1. UStore-自定义JDF文件格式输出
  2. CTF(pwn)攻防世界warmup
  3. 今天突然想到一个问题:地球在转动吗,由东西向西跳与由西向东跳哪个更远...
  4. Kenshin Cui's Blog
  5. c得到当前时分秒 linux_Linuxc - Linux系统下的时间知识点
  6. AMD CPU驱动被曝漏洞,可使 KASLR崩溃、密码泄露
  7. bzoj 1013: [JSOI2008]球形空间产生器sphere(高斯消元)
  8. Grafana 安装和使用
  9. redis 集群常用命令
  10. 多传感器信息融合matlab程序,传感器信息融合:MATLAB程序实现
  11. el-descriptions
  12. 10 个免费的高清图库网站,强烈推荐
  13. 消防基础知识——燃烧与火灾
  14. 推荐 :教你用神经网络求解高级数学方程!
  15. 1月第1周榜单丨B站UP主排行榜(飞瓜数据B站)发布!
  16. JavaScript贷款计算器
  17. Linux系统怎么复制文件夹下的全部文件到另外文件夹?
  18. elk怎么读的_elk,elk的英文意思和翻译,elk的音标读音,用法,例句,发音,含义讲解
  19. 个人对PIN码的基本理解
  20. Oracle存储过程语法和基本使用

热门文章

  1. gimp的中文化,汉化安装
  2. 架构师的软实力之概念化
  3. 笔记本电池修复常见方法大全
  4. 计算机毕业设计Java租车网站(源码+系统+mysql数据库+Lw文档)
  5. 黄金分割Android程序,黄金分割游戏下载-黄金分割 安卓版v1.2-PC6手游网
  6. 2.3 感兴趣区域(ROI)
  7. (三)nimlang web开发 index.html jester
  8. 立交桥制图分享(一)
  9. 单片机如何获得5V电源
  10. 企业推行网络营销推广见效快的5种营销方式