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:00[America/Denver] :

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

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

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

示例: Between=2037-01-20T17:42:47.789-07:00[America/Denver], 2037-01-21T17:42:47.789-07:00[America/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):读取用户配置的断言规则,而后解析成判断条件,对用户请求做判断

相关推荐
后端小张12 小时前
【JAVA 进阶】Mybatis-Plus 实战使用与最佳实践
java·spring boot·spring·spring cloud·tomcat·mybatis·mybatis plus
青鱼入云1 天前
介绍Spring Cloud Stream
spring cloud·微服务
青鱼入云1 天前
介绍一下Ribbon的工作原理
spring cloud·微服务·ribbon
青鱼入云1 天前
Ribbon是如何与服务注册中心nacos交互的
spring cloud·微服务·ribbon
青鱼入云1 天前
OpenFeign介绍
spring cloud·微服务
勇往直前plus1 天前
学习和掌握RabbitMQ及其与springboot的整合实践(篇一)
spring boot·学习·spring cloud·rabbitmq·java-rabbitmq
杨DaB2 天前
【SpringCloud】Eureka
spring cloud·eureka·1024程序员节
洛克大航海2 天前
7-SpringCloud-服务网关 Gateway-高级特性 Route
java·spring cloud·gateway·route
我命由我123453 天前
Spring Cloud - Spring Cloud 声明式接口调用(Fiegn 声明式接口调用概述、Fiegn 使用)
java·后端·spring·spring cloud·微服务·架构·java-ee
杨DaB3 天前
【SpringCloud】Ribbon(LoadBalancer ) 和 Feign
spring·spring cloud·ribbon·feign·loadbalance