文章目录

  • 前言
  • 一、内置断言
  • 二、内置过滤器
    • 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. 检查是否支持 SO_REUSEPORT
  2. Objective-C 入门(七)协议 protocol(JAVA中的接口)
  3. Python中定义函数的三种形式
  4. exit()、_Exit() 和 _exit() 函数的区别和联系
  5. 程序员面试金典 - 面试题 17.25. 单词矩阵(Trie树+DFS回溯,hard)
  6. 揭秘高德地图如何利用MaxCompute管理海量数据
  7. oracle 如何迁移到 mysql_怎么将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL...
  8. 探讨一下,数据库里账号的密码,怎样存放更加安全?
  9. vc安装.zip_空间分析:4-1.分词模型hanLP简介与安装
  10. 从零开始学前端:列表标签 --- 今天你学习了吗?(CSS:Day06)
  11. CENTOS利用Keepalived构建双主MySQL+双机热备
  12. 手把手教你如何加入到github的开源世界!
  13. SLAM学习笔记-------------(八)视觉里程计2
  14. 外壳IK防护等级测试
  15. DMA原理AHB-DMA控制器工作过程总结
  16. 网页设计作业 酒店公寓网站设计——高级酒店公寓网页(4页) HTML+CSS+JavaScript 旅游主题度假酒店
  17. IDEA 去掉 pom 文件标签名称下划线
  18. tomcat 配置域名和ssl证书
  19. java宠物小精灵_4978:宠物小精灵之收服
  20. eos安装区块链开发环境

热门文章

  1. 计算机应用基础实训任务12345答案,《计算机应用基础》第一次作业题目、答案.doc...
  2. winxp映射linux目录,如何让WinXP与Linux二者相互共存(2)
  3. Python 实现语音转文本
  4. 高校“一卡通”解决方案
  5. Excel—利用散点图计算相关系数
  6. matlab帽檐图像,图像分割技术与MATLAB仿真
  7. 好用的在线调试摄像头的网址
  8. android9.0 谷歌全家桶,Motorola P30 NOTE/Play刷国际版9.0(Android One)教程
  9. 互联网公益进入下半场,为啥2亿人次在支付宝做捐赠?
  10. 2016 计算机一级学科,2016北京市大学一级学科排行榜