【spring 】Spring Cloud Gateway 的Filter学习
介绍和使用场景
Spring Cloud Gateway 是一个基于 Spring Framework 5 和 Project Reactor 的 API 网关,它旨在为微服务架构提供一种简单而有效的方式来处理请求路由、过滤、限流等功能。在 Spring Cloud Gateway 中,Filter 扮演着非常重要的角色,以下是 Filter 的一些主要作用:
-
请求路由:Filter 可以根据请求的特定条件(如路径、头信息、参数等)将请求路由到不同的服务。
-
请求修改:在请求被路由到目标服务之前,Filter 可以修改请求的内容,比如添加或删除请求头、修改请求参数等。
-
响应修改:Filter 可以在将响应返回给客户端之前修改响应的内容,比如添加或删除响应头、修改响应体等。
-
身份验证和授权:Filter 可以用于实现安全控制,比如检查请求中的认证信息,确保只有授权的用户才能访问特定的资源。
-
限流和熔断:Filter 可以实现限流功能,控制对特定服务的访问频率,以及熔断机制,防止服务过载。
-
日志记录和监控:Filter 可以在请求和响应的生命周期中记录日志,用于监控和调试。
-
请求聚合:Filter 可以将多个微服务的响应聚合到一个响应中,实现数据的聚合和重组。
-
错误处理:Filter 可以捕获和处理请求处理过程中的错误,返回给客户端统一的错误响应。
-
跨域资源共享(CORS):Filter 可以处理跨域请求,添加必要的响应头,以支持前端应用的跨域请求。
-
缓存控制:Filter 可以实现缓存机制,减少对后端服务的请求,提高系统性能。
常见gateway的filter
spring gateway的filter 包路径org.springframework.cloud.gateway.filter
-
Built-in Filter Factories(内置过滤器工厂):Spring Cloud Gateway 提供了一系列内置的过滤器工厂,这些工厂可以用来实现常见的功能,如请求头修改、路径重写等。这些过滤器工厂是预定义的,可以直接在配置中使用。
-
Custom Filters(自定义过滤器):除了内置的过滤器工厂,Spring Cloud Gateway 还支持自定义过滤器的开发。开发者可以根据自己的需求实现特定的逻辑,比如添加认证、日志记录等。
-
Pre-filter(前置过滤器):在路由到微服务之前执行的过滤器。这类过滤器通常用于修改请求头、认证、日志记录等。
-
Post-filter(后置过滤器):在路由到微服务之后执行的过滤器。这类过滤器可以用于修改响应头、日志记录等。
-
Global Filter(全局过滤器):全局过滤器会对所有的路由请求生效,通常用于实现跨域资源共享(CORS)等全局性的功能。
-
Route Filter(路由过滤器):与特定路由关联的过滤器,用于处理特定路由的请求和响应
1. AddRequestHeader
这个 Filter
用于在请求中添加一个 HTTP 头。
filters:- AddRequestHeader=X-Request-Foo, Bar
这会在请求中添加一个名为 X-Request-Foo
的头,其值为 Bar
。
2. AddRequestParameter
这个 Filter
用于在请求中添加一个查询参数。
filters:- AddRequestParameter=foo, bar
这会在请求中添加一个名为 foo
的查询参数,其值为 bar
。
3. AddResponseHeader
这个 Filter
用于在响应中添加一个 HTTP 头。
filters:- AddResponseHeader=X-Response-Foo, Bar
这会在响应中添加一个名为 X-Response-Foo
的头,其值为 Bar
。
4. DedupeResponseHeader
这个 Filter
用于在响应中删除重复的 HTTP 头。
filters:- DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
这会删除响应中重复的 Access-Control-Allow-Credentials
和 Access-Control-Allow-Origin
头。
5. PrefixPath
这个 Filter
用于在请求路径前添加一个前缀。
filters:- PrefixPath=/mypath
这会在请求路径前添加 /mypath
前缀。
6. PreserveHostHeader
这个 Filter
用于保留原始请求的主机头。
filters:- PreserveHostHeader
7. RequestRateLimiter
这个 Filter
用于限制请求速率。
filters:- name: RequestRateLimiterargs:key-resolver: "#{@userKeyResolver}"redis-rate-limiter.replenishRate: 10redis-rate-limiter.burstCapacity: 20
这会使用 Redis 来限制请求速率。
8. RewritePath
这个 Filter
用于重写请求路径。
filters:- RewritePath=/foo/(?<segment>.*), /$\{segment}
这会将 /foo/bar
重写为 /bar
。
9. SetPath
这个 Filter
用于设置请求路径。
filters:- SetPath=/{segment}
这会将请求路径设置为 /segment
。
10. SetRequestHeader
这个 Filter
用于设置请求头。
filters:- SetRequestHeader=X-Request-Foo, Bar
这会将请求头 X-Request-Foo
设置为 Bar
。
11. SetResponseHeader
这个 Filter
用于设置响应头。
filters:- SetResponseHeader=X-Response-Foo, Bar
这会将响应头 X-Response-Foo
设置为 Bar
。
12. StripPrefix
这个 Filter
用于去除请求路径的前缀。
filters:- StripPrefix=1
这会去除请求路径的第一个前缀。
13. Retry
这个 Filter
用于重试请求。
filters:- name: Retryargs:retries: 3statuses: BAD_GATEWAY
这会在请求失败时重试 3 次。
14. RequestSize
这个 Filter
用于限制请求的大小。
filters:- name: RequestSizeargs:maxSize: 5000000
这会限制请求的大小为 5MB。
15. ModifyRequestBody
这个 Filter
用于修改请求体。
filters:- name: ModifyRequestBodyargs:contentType: "application/json"rewriteFunction: "com.example.RewriteRequestBody::rewrite"
这会使用自定义的 rewrite
方法来修改请求体。
16. ModifyResponseBody
这个 Filter
用于修改响应体。
filters:- name: ModifyResponseBodyargs:contentType: "application/json"rewriteFunction: "com.example.RewriteResponseBody::rewrite"
这会使用自定义的 rewrite
方法来修改响应体。
17. SecureHeaders
这个 Filter
用于添加安全相关的响应头。
filters:- SecureHeaders
这会添加一些安全相关的响应头,如 X-XSS-Protection
、X-Frame-Options
等。
18. FallbackHeaders
这个 Filter
用于在发生错误时添加响应头。
filters:- FallbackHeaders
这会在发生错误时添加一些响应头。
19. RequestHeaderToRequestUri
这个 Filter
用于将请求头转换为请求 URI。
filters:- RequestHeaderToRequestUri=X-CF-Forwarded-Url
这会将 X-CF-Forwarded-Url
头的内容转换为请求 URI。
20. SetStatus
这个 Filter
用于设置响应状态码。
filters:- SetStatus=401
这会将响应状态码设置为 401。
相关文章:

【spring 】Spring Cloud Gateway 的Filter学习
介绍和使用场景 Spring Cloud Gateway 是一个基于 Spring Framework 5 和 Project Reactor 的 API 网关,它旨在为微服务架构提供一种简单而有效的方式来处理请求路由、过滤、限流等功能。在 Spring Cloud Gateway 中,Filter 扮演着非常重要的角色&#…...

每秒交易数(Transactions Per Second:TPS)详细拆解
每秒交易数(TPS)是指计算机网络每秒可以处理的交易数量。TPS是衡量不同区块链和其他计算机系统速度的关键指标。然而,TPS并不是用来衡量区块链速度的唯一指标。许多人认为,虽然TPS很重要,但最终性实际上是一个更重要的…...

【初阶数据结构与算法】链表刷题之链表分割、相交链表、环形链表1、环形链表I、环形链表II
文章目录 一、链表分割二、相交链表三、环形链表I四、环形链表|| 一、链表分割 题目链接:https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70 我们来看看链表分割的题目描述和它给出的函数: 这个题虽然是以C形式来做࿰…...

【STL】set,multiset,map,multimap的介绍以及使用
关联式容器 在C的STL中包含序列式容器和关联式容器 1.关联式容器:它里面存储的是元素本身,其底层是线性序列的数据结构,比如:vector,list,deque,forward_list(C11)等 2.关联式容器里面储存的…...

新能源二手车交易量有望破百万,二手车市场回暖了吗?
这些年,伴随着新能源汽车市场的高速发展,各种新能源车的二手车也在逐渐增加,不过之前的二手车市场相对比较冷清,就在最近一则新闻传出新能源二手车交易量有望破百万,二手车市场这是回暖了吗? 一、新能源二手…...
哈佛商业评论 | 项目经济的到来:组织变革与管理革新的关键
在21世纪,项目经济(Project Economy)逐步取代传统运营,成为全球经济增长的核心动力。项目已不再是辅助工具,而是推动创新和变革的重要载体。然而,只有35%的项目能够成功,显示出项目管理领域存在巨大的改进空间。本文将详细探讨项目经济的背景、项目管理的挑战,以及适应…...
web浏览器环境下使用window.open()打开PDF文件不是预览,而是下载文件?
如果你使用 window.open() 方法打开 PDF 文件,但浏览器不是预览而是下载文件,这可能是由于以下几个原因: 服务器配置:服务器可能将 PDF 文件配置为下载而不是预览。例如,服务器可能设置了 Content-Disposition 响应头…...

【GeekBand】C++设计模式笔记12_Singleton_单件模式
1. “对象性能” 模式 面向对象很好地解决了 “抽象” 的问题, 但是必不可免地要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。典型模式 SingletonFlyweight 2. Si…...

Pyhon基础数据结构(列表)【蓝桥杯】
a [1,2,3,4,5] a.reverse() print("a ",a) a.reverse() print("a ",a)# 列表 列表(list)有由一系列按照特定顺序排序的元素组成 列表是有顺序的,访问任何元素需要通过“下标访问” 所谓“下标”就是指元素在列表从左…...

Linux篇(权限管理命令)
目录 一、权限概述 1. 什么是权限 2. 为什么要设置权限 3. Linux中的权限类别 4. Linux中文件所有者 4.1. 所有者分类 4.2. 所有者的表示方法 属主权限 属组权限 其他权限 root用户(超级管理员) 二、普通权限管理 1. ls查看文件权限 2. 文件…...

深入理解 Spark 中的 Shuffle
Spark 的介绍与搭建:从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 Spark on YARN:Spark集群模式…...

leetcode-8-字符串转整数
题解: 代码:...
SQL注入注入方式(大纲)
SQL注入注入方式(大纲) 常规注入 通常没有任何过滤,直接把参数存放到SQL语句中。 宽字节注入 GBK 编码 两个字节表示一个字符ASCII 编码 一个字节表示一个字符MYSQL默认字节集是GBK等宽字节字符集 原理: 设置MySQL时错误配置…...

OpenCV基础(1)
1.图像读写与窗口显示 1.1.imread读取图像文件 Mat cv::imread(const string &filename,int flags IMREAD_COLOR); filename:要读取的图像文件名flags:读取模式,可以从枚举cv::ImreadModes中取值,默认取值是IMREAD_COLOR&am…...

【freertos】FreeRTOS信号量的介绍及使用
FreeRTOS信号量 一、概述二、PV原语三、函数接口1.创建一个计数信号量2.删除一个信号量3.信号量释放4.在中断释放信号量5.获取一个信号量,可以是二值信号量、计数信号量、互斥量。6.在中断获取一个信号量,可以是二值信号量、计数信号量7.创建一个二值信号…...
React Native 全栈开发实战班 - 图片加载与优化
在移动应用中,图片加载与优化 是提升用户体验和减少资源消耗的重要环节。图片加载不当可能导致应用卡顿、内存泄漏甚至崩溃。本章节将介绍 React Native 中常用的图片加载方法,包括 Image 组件的使用、第三方图片加载库(如 react-native-fast…...

Golang云原生项目:—实现ping操作
熟悉报文结构 ICMP校验和算法: 报文内容,相邻两个字节拼接到一起组成一个16bit数,将这些数累加求和若长度为奇数,则将剩余一个字节,也累加求和得出总和之后,将和值的高16位与低16位不断求和,直…...
mysql如何查看当前事务的事务id
-- 开启一个事务,但不执行写操作 START TRANSACTION; -- 查询 InnoDB 事务信息 SELECT * FROM information_schema.innodb_trx;在 MySQL 的 MVCC (多版本并发控制) 中,事务 ID (Transaction ID) 是由 InnoDB 存储引擎分配的,它的分配机制与事…...
在linux里如何利用vim对比两个文档不同的行数
在Linux中,可以使用vimdiff命令来对比两个文档中不同的行。首先确保你的系统中安装了vim编辑器。 打开终端,使用以下命令来启动vimdiff: vimdiff file1 file2 这里file1和file2是你想要对比的两个文件的路径。 vimdiff会以并排方式打开两…...
深入解析Python中的逻辑回归:从入门到精通
引言 在数据科学领域,逻辑回归(Logistic Regression)是一个非常重要的算法,它不仅用于二分类问题,还可以通过一些技巧扩展到多分类问题。逻辑回归因其简单、高效且易于解释的特点,在金融、医疗、广告等多个…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...