当前位置: 首页 > news >正文

38 路由的过滤器配置

3.3.断言工厂

我们在配置文件中写的断言规则只是字符串,这些字符串会被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权重处理

我们只需要掌握Path这种路由工程就可以了。

3.4.过滤器工厂

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

在这里插入图片描述

3.4.1.路由过滤器的种类

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

名称说明
AddRequestHeader给当前请求添加一个请求头
RemoveRequestHeader移除请求中的一个请求头
AddResponseHeader给响应结果中添加一个响应头
RemoveResponseHeader从响应结果中移除有一个响应头
RequestRateLimiter限制请求的流量

3.4.2.请求头过滤器

下面我们以AddRequestHeader 为例来讲解。

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

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

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

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

在这里插入图片描述

3.4.3.默认过滤器

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

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

3.4.4.总结

过滤器的作用是什么?

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

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

defaultFilters的作用是什么?

① 对所有路由都生效的过滤器

http://www.lryc.cn/news/227703.html

相关文章:

  • 3分钟带你了解前端缓存-HTTP缓存
  • 【多线程 - 03、线程的生命周期】
  • excel表的筛选后自动求和
  • 2311rust特征
  • 原型模式 rust和java的实现
  • 阿里云ACK(Serverless)安装APISIX网关及APISIX Ingress Controller
  • vue+mongodb+nodejs实现表单增删改查
  • SpringBootWeb案例——Tlias智能学习辅助系统(3)——登录校验
  • hive和spark-sql中 日期和时间相关函数 测试对比
  • Cell和RefCell
  • DaoWiki(基于Django)开发笔记 20231113
  • 照片放大软件 Topaz Gigapixel AI mac中文版简介
  • 某手游完整性校验分析
  • 【ElasticSearch】学习使用DSL和RestClient编写查询语句
  • asp.net外卖网站系统VS开发mysql数据库web结构c#编程Microsoft Visual Studio
  • 2.4.0 Milky Way 强势登场!新功能大爆炸,让你High翻全场!
  • C语言----静态链接库和动态链接库
  • PCA(主成分分析)数据降维技术代码详解
  • Git版本控制系统之分支与标签(版本)
  • JSP运行环境搭建
  • React通过属性 (props) 和状态 (state) 来传递和管理组件的数据
  • Web相机和浏览器的二维码扫描方案
  • 云端部署ChatGLM-6B
  • 设计模式(3)-结构型模式
  • C/C++调试工具 - gdb详解
  • 传奇GOM引擎微端连接不上如何解决
  • Easymesh介绍
  • 图像相似度对比方法
  • C++ 配合图形库实现画线效果
  • zookeeper应用之分布式屏障