SpringCloud入门(十一)路由过滤器和路由断言工厂

一、路由过滤器

路由过滤器( GatewayFilter )是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:

如图:网关路由过滤器:

路由过滤器的作用是:

1.对路由的请求或响应做加工处理,比如添加请求头

2.配置在路由下的过滤器只对当前路由的请求生效

Spring提供了31种不同的路由过滤器工厂。例如:

官网:

名称 | 说明

-AddRequestHeader | 给当前请求添加一个请求头

-RemoveRequestHeader | 移除请求中的一个请求头

-AddResponseHeader | 给响应结果中添加一个响应头

-RemoveResponseHeader | 从响应结果中移除有一个响应头

-RequestRateLimiter | 限制请求的流量

示例:给所有进入userservice的请求添加一个请求头:Truth=IT is freaking awesome!

实现方式:在gateway中修改application.yml文件,给userservice的路由添加过滤器:

只需要修改gateway服务的application.yml文件,添加路由过滤即可:

XML 复制代码
spring:
  cloud:
    gateway:
      routes:
      - id: user-service 
        uri: lb://userservice 
        predicates: 
        - Path=/user/** 
        filters: # 过滤器
        - AddRequestHeader=Truth, IT is freaking awesome! # 添加请求头

当前过滤器写在userservice路由下,因此仅仅对访问userservice的请求有效。

默认过滤器:defaultFilters的作用是:对所有路由都生效的过滤器

如果要对所有的路由都生效,则可以将过滤器工厂写到default下。格式如下:

XML 复制代码
spring:
  cloud:
    gateway:
      routes:
      - id: user-service 
        uri: lb://userservice 
        predicates: 
        - Path=/user/**
      default-filters: # 默认过滤项
      - AddRequestHeader=Truth, IT is freaking awesome! 

二、路由断言工厂

路由断言工厂Route Predicate Factory,我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件

例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来 处理的,像这样的断言工厂在SpringCloudGateway还有:

名称 - 说明 - 示例

  • After : 是某个时间点后的请求

示例: After=2037-01-20T17:42:47.789-07:00America/Denver :

  • Before : 是某个时间点之前的请求

示例: Before=2031-04-13T15:14:47.433+08:00Asia/Shanghai :

  • Between : 是某两个时间点之前的请求

示例: Between=2037-01-20T17:42:47.789-07:00America/Denver, 2037-01-21T17:42:47.789-07:00America/Denver :

  • Cookie : 请求必须包含某些cookie

示例: Cookie=chocolate, ch.p :

  • Header : 请求必须包含某些header

示例: Header=X-Request-Id, \d+ :

  • Host : 请求必须是访问某个host(域名)

示例: Host=**.somehost.org,**.anotherhost.org :

  • Method : 请求方式必须是指定方式

示例: Method=GET,POST :

  • Path : 请求路径必须符合指定规则

示例: Path=/red/{segment},/blue/** :

  • Query : 请求参数必须包含指定参数

示例: Query=name, Jack或者- Query=name :

  • RemoteAddr : 请求者的ip必须是指定范围

示例: RemoteAddr=192.168.1.1/24 :

  • Weight : 权重处理

路由工厂作用(PredicateFactory):读取用户配置的断言规则,而后解析成判断条件,对用户请求做判断

相关推荐
霸道流氓气质6 小时前
Serverless 架构入门与实战:FaaS/BaaS 模型、Spring Cloud Function 适配与 AI 推理冷启动优化的 Java 全栈指南
spring cloud·架构·serverless
SL_staff12 小时前
低代码选型避坑指南:为什么‘能拖拽’不等于‘能交付’?——基于JVS八大引擎的四维交付能力评估框架
java·低代码·spring cloud
从零到一未来可期18 小时前
第8集:MCP协议:一个协议让AI接入所有企业系统
spring·spring cloud
Thomas.Sir19 小时前
第28课:统一日志收集、ELK搭建 & 线上问题排查体系
elk·spring cloud
来福猿2 天前
Nacos 源码解析:服务注册、配置中心与心跳续约机制
spring·spring cloud
Thomas.Sir2 天前
第27课:SkyWalking全链路追踪实战 & 微服务调用链路分析
spring cloud·微服务·skywalking
野生技术架构师2 天前
Dubbo 还是 Spring Cloud?从架构本质到落地选型
spring cloud·架构·dubbo
Wang's Blog2 天前
Java 项目实战: 交友项目 - 前后端分离的工程实践
java·spring cloud·架构
自强的小白2 天前
项目整个架构的构建和演进。(重点!)
spring cloud·微服务·架构
Thomas.Sir2 天前
第25课:Spring Cloud监控体系详解 & Actuator端点全解
spring cloud·actuator