当前位置:首页 > 服务端 > Spring Cloud Gateway路由及过滤规则

Spring Cloud Gateway路由及过滤规则

2022年11月07日 11:06:22服务端35

路由

Spring Cloud Gateway包含许多内置的路由断言Factories。这些断言都匹配HTTP请求的不同属性。

After 路由断言

After Route Predicate 在该日期时间之后发生的请求都将被匹配(UTC日期个数xxxx-xx-xxTxx:xx:xx+08:00[Asia/Shanghai])

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: http://localhost:8080
        predicates:
        - After=2022-03-30T18:00:00+08:00[Asia/Shanghai]

Before 路由断言

Before Route Predicate 在该日期时间之前发生的请求都将被匹配

spring:
  cloud:
    gateway:
      routes:
      - id: before_route
        uri: http://localhost:8080
        predicates:
        - Before=2022-03-30T18:00:00+08:00[Asia/Shanghai]

Between 路由断言

Before Route Predicate 有两个参数,x和y。在x和y之间的请求将被匹配。y参数的实际时间必须在x之后。

spring:
  cloud:
    gateway:
      routes:
      - id: between_route
        uri: http://localhost:8080
        predicates:
        - Between=2022-03-30T18:00:00+08:00[Asia/Shanghai], 2022-03-31T18:00:00+08:00[Asia/Shanghai]

Cookie路由断言

Cookie Route Predicate 有两个参数,cookie名称和正则表达式。请求包含次cookie名称且正则表达式匹配的将会被匹配。

spring:
  cloud:
    gateway:
      routes:
      - id: cookie_route
        uri: http://localhost:8080
        predicates:
        - Cookie=token, \d

Header路由断言

Header Route Predicate 有两个参数,header名称和正则表达式。请求包含header名称且正则表达式匹配的将会被匹配。

spring:
  cloud:
    gateway:
      routes:
      - id: header_route
        uri: http://localhost:8080
        predicates:
        - Header=X-Request-Id, \d+

Host 路由断言

Host Route Predicate 包括一个参数:host name列表。使用Ant path匹配规则。‘,’作为分隔符。

spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: http://localhost:8080
        predicates:
        - Host=**.somehost.org,**.anotherhost.org

Ant path匹配规则:

符号 描述
匹配任何单字符
* 匹配0或者任意数量的字符
** 匹配0或者更多的目录

Method 路由断言

Method Route Predicate 包括一个参数: 需要匹配的HTTP请求方式。‘,’作为分隔符。

spring:
  cloud:
    gateway:
      routes:
      - id: method_route
        uri: http://localhost:8080
        predicates:
        - Method=GET,POST

Path 路由断言

Path Route Predicate 有2个参数: 一个Spring PathMatcher表达式列表和可选matchOptionalTrailingSeparator标识 .

spring:
  cloud:
    gateway:
      routes:
      - id: path_route
        uri: http://localhost:8080
        predicates:
        - Path=/foo/{
     segment},/bar/{
     segment}

URI 模板变量 (如上例中的 segment ) 将以Map的方式保存于ServerWebExchange.getAttributes()。key为ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE. 这些值将在GatewayFilter Factories使用

Map<String, String> map = ServerWebExchangeUtils.getPathPredicateVariables(exchange);
String segment = map .get("segment");

Query 路由断言

Query Route Predicate 有2个参数: 必选项 param 和可选项 regexp.

spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: http://localhost:8080
        predicates:
        - Query=abc,ac. //请求包含abc参数,并且值匹配为ac.正则表达式 可以访问

RemoteAddr路由断言

RemoteAddr Route Predicate 的参数为IP地址

spring:
  cloud:
    gateway:
      routes:
      - id: remoteAddr_route
        uri: http://localhost:8080
        predicates:
        - RemoteAddr=192.168.1.1

Weight路由断言

Weight Route Predicate 的参数有两个group和weight。按组分配权重

spring:
  cloud:
    gateway:
      routes:
      - id: weight_route1
        uri: http://localhost:8080
        predicates:
        - Weight=group1,8 # 80%
      - id: weight_route2
        uri: http://localhost:8080
        predicates:
        - Weight=group2,2 # 20%

过滤

Gateway分为pre类型的过滤器和post类型的过滤器

  • pre类型的过滤在转发到后端微服务之前执行,可以做鉴权限流等操作
  • post类型的过滤在请求完成之后、将结果范围给客户端之前执行

大概可以分为以下几类:

  1. Header
  2. Parameter
  3. Path
  4. Body
  5. Status
  6. Session
  7. Redirect
  8. Retry
  9. RateLimiter
  10. Hystrix

常用的四种过滤器:

AddRequestParameter Gateway Filter

添加请求参数,属于前置过滤。两个参数:key和value

spring:
  cloud:
    gateway:
      routes:
      - id: route1
        uri: http://localhost:8080
        predicates:
        - Path=/product/**
        filters:
        - AddRequestParameter=info,hehe

RewritePath Gateway Filter

将请求路径重写如:/api-gateway/xxx/重写为/xxx/,属于前置过滤。

spring:
  cloud:
    gateway:
      routes:
      - id: route1
        uri: http://localhost:8080
        predicates:
        - Path=/product/**,/api-gateway/**
        filters:
        - RewritePath=/api-gateway(?<segment>/?.*),$\{
     segment}

SetStatus Gateway Filter

将响应的HTTP请求头设置为454,属于后置过滤

spring:
  cloud:
    gateway:
      routes:
      - id: route1
        uri: http://localhost:8080
        predicates:
        - Path=/product/**,/api-gateway/**
        filters:
        - SetStatus=454

AddResponsHeader Gateway Filter

添加头信息,属于后置过滤

spring:
  cloud:
    gateway:
      routes:
      - id: route1
        uri: http://localhost:8080
        predicates:
        - Path=/product/**,/api-gateway/**
        filters:
        - AddResponsHeader=X-Response-Author,test

作者:苍山不墨
来源链接:https://blog.csdn.net/qq_37032116/article/details/123855621

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68280.html

分享给朋友:

“Spring Cloud Gateway路由及过滤规则” 的相关文章

Spring Cloud实战|3.SpringCloud 整合common模块

Spring Cloud实战|3.SpringCloud 整合common模块

手把手教你从0开始搭建spring cloud alibaba 脚手架,关注公众号“AI码师” 获取项目完整源码 视频地址:视频教程 创建新模块 ams-common 当前目录结构 基础包封装 引入必备依...

SpringBoot整合 mybatisPlus

SpringBoot整合 mybatisPlus

引言 最近在准备一期SpringBoot整合大全系列文章,同时也会有视频放出(视频还在酝酿中),如果大家觉得有帮助,记得点赞加收藏哦。 话不多说,咱们直接进入正题。 ​ 代码已经上传到码云:https://gitee.com/lezaiclu...

Spring Boot 2.x 小新功能 – Spring Data Web configuration

Spring Boot 2.x 小新功能 – Spring Data Web configuration

本文提纲 一、前言 二、运行 chapter-5-spring-boot-paging-sorting 工程 三、chapter-5-spring-boot-paging-sorting 工程配置详解 四、小结 运行环境:...

SpringCloud实战|8.SpringCloud 整合 seata1.3

SpringCloud实战|8.SpringCloud 整合 seata1.3

手把手教你从0开始搭建spring cloud alibaba 脚手架,关注公众号“AI码师” 获取项目完整源码 前言 本篇文章介绍了如何在Spring Cloud项目中引入seata,以及seata的安装过程 开整...

WebFlux 集成 Thymeleaf 、 Mongodb 实践,Spring Boot 2

WebFlux 集成 Thymeleaf 、 Mongodb 实践,Spring Boot 2

这是泥瓦匠的第105篇原创 文章工程: JDK 1.8 Maven 3.5.2 Spring Boot 2.1.3.RELEASE 工程名:springboot-webflux-5-thymeleaf-mong...

深入浅出 spring-data-elasticsearch

『  风云说:能分享自己职位的知识的领导是个好领导。 』 运行环境 :JDK 7 或 8,Maven 3.0+ 技术栈 :SpringBoot 1.5+, Spring Data Elasticsearch 1.5+ ,Elast...

Spring Boot WebFlux 集成 Mongodb 数据源操作

Spring Boot WebFlux 集成 Mongodb 数据源操作

WebFlux 整合 Mongodb 前言 上一讲用 Map 数据结构内存式存储了数据。这样数据就不会持久化,本文我们用 MongoDB 来实现 WebFlux 对数据源的操作。 什么是 MongoDB ? 官网:https://...

SpringBoot整合MybatisPlus 实现多租户

SpringBoot整合MybatisPlus 实现多租户

代码已经上传到码云:https://gitee.com/lezaiclub/springboot-hyper-integration.git,欢迎白嫖 引言 今天我们来聊聊多组户 其实多租户主要讲的是数据隔离,即每个企业或用户都享有自己的独立...

异常Error creating bean with name 'shiroFilter' defined in file [D:\apache-tomcat-7.0.54\wtpwebapps\shiro-ssm4\WEB-INF\classes\spring-shiro.xml]: Cannot resolve reference to bean 'securityManager' while

异常Error creating bean with name 'shiroFilter' defined in file [D:\apache-tomcat-7.0.54\wtpwebapps\shiro-ssm4\WEB-INF\classes\spring-shiro.xml]: Cannot resolve reference to bean 'securityManager' while

严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.sp...

解决spring+shiro cacheManager 登录报错

一、项目启动,登录报错 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter' defined in class path resource...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。