【spring 】Spring Cloud Gateway 的Filter学习

介绍和使用场景

Spring Cloud Gateway 是一个基于 Spring Framework 5 和 Project Reactor 的 API 网关,它旨在为微服务架构提供一种简单而有效的方式来处理请求路由、过滤、限流等功能。在 Spring Cloud Gateway 中,Filter 扮演着非常重要的角色,以下是 Filter 的一些主要作用:

  1. 请求路由:Filter 可以根据请求的特定条件(如路径、头信息、参数等)将请求路由到不同的服务。

  2. 请求修改:在请求被路由到目标服务之前,Filter 可以修改请求的内容,比如添加或删除请求头、修改请求参数等。

  3. 响应修改:Filter 可以在将响应返回给客户端之前修改响应的内容,比如添加或删除响应头、修改响应体等。

  4. 身份验证和授权:Filter 可以用于实现安全控制,比如检查请求中的认证信息,确保只有授权的用户才能访问特定的资源。

  5. 限流和熔断:Filter 可以实现限流功能,控制对特定服务的访问频率,以及熔断机制,防止服务过载。

  6. 日志记录和监控:Filter 可以在请求和响应的生命周期中记录日志,用于监控和调试。

  7. 请求聚合:Filter 可以将多个微服务的响应聚合到一个响应中,实现数据的聚合和重组。

  8. 错误处理:Filter 可以捕获和处理请求处理过程中的错误,返回给客户端统一的错误响应。

  9. 跨域资源共享(CORS):Filter 可以处理跨域请求,添加必要的响应头,以支持前端应用的跨域请求。

  10. 缓存控制:Filter 可以实现缓存机制,减少对后端服务的请求,提高系统性能。

常见gateway的filter

spring gateway的filter 包路径org.springframework.cloud.gateway.filter

  1. Built-in Filter Factories(内置过滤器工厂):Spring Cloud Gateway 提供了一系列内置的过滤器工厂,这些工厂可以用来实现常见的功能,如请求头修改、路径重写等。这些过滤器工厂是预定义的,可以直接在配置中使用。

  2. Custom Filters(自定义过滤器):除了内置的过滤器工厂,Spring Cloud Gateway 还支持自定义过滤器的开发。开发者可以根据自己的需求实现特定的逻辑,比如添加认证、日志记录等。

  3. Pre-filter(前置过滤器):在路由到微服务之前执行的过滤器。这类过滤器通常用于修改请求头、认证、日志记录等。

  4. Post-filter(后置过滤器):在路由到微服务之后执行的过滤器。这类过滤器可以用于修改响应头、日志记录等。

  5. Global Filter(全局过滤器):全局过滤器会对所有的路由请求生效,通常用于实现跨域资源共享(CORS)等全局性的功能。

  6. 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-ProtectionX-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。




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/60932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opencv(c++)图像的灰度转换

opencv(c)图像的灰度转换 quickopencv.h #pragma once #include <opencv2/opencv.hpp> using namespace cv; class QuickDemo { public:void colorSpace_Demo(Mat& image); };quickopencv.cpp #include "quickopencv.h"// QuickDemo类中的颜色空间演示函…

problem forward和solution backward有什么区别

Note: 在具体研究中&#xff0c;problem forward是先提出问题&#xff0c;然后围绕着科学问题设计出完美的解决方案&#xff1b;而solution backward是先盘算自己有哪些技术&#xff0c;有哪些解决方案&#xff0c;反过来去寻找和定义问题。

C++构造函数详解

构造函数详解&#xff1a;C 中对象初始化与构造函数的使用 在 C 中&#xff0c;构造函数是一种特殊的成员函数&#xff0c;它在创建对象时自动调用&#xff0c;用来初始化对象的状态。构造函数帮助我们确保每个对象在被创建时就处于一个有效的状态&#xff0c;并且在不传递任何…

使用WebSocket技术实现Web应用中的实时数据更新

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用WebSocket技术实现Web应用中的实时数据更新 使用WebSocket技术实现Web应用中的实时数据更新 使用WebSocket技术实现Web应用中…

[N1CTF 2018]eating_cms

打开题目 只有个登录框&#xff0c;其他什么都没有&#xff0c;尝试了一下弱口令&#xff0c;没能成功 尝试访问一下register.php&#xff0c;看看能不能注册个账号 注册页面&#xff0c;随便注册个账号登陆一下 url中感觉是个注入点&#xff0c;尝试使用file伪协议读取一下us…

算法之二分查找优化:leetcode34:在排序数组中查找元素的第一个和最后一个位置

题干 分析 问题背景 给定一个已排序的数组&#xff0c;目标是找到一个给定的目标值 target 在数组中的 第一个位置 和 最后一个位置。如果目标值不存在&#xff0c;返回 [-1, -1]。 由于题干要求的时间复杂度是 O(log n)&#xff0c;并且数组是有序的&#xff0c;考虑使用二分…

【3D Slicer】的小白入门使用指南九

定量医学影像临床研究与实践 任务 定量成像教程 定量成像是从医学影像中提取定量测量的过程。 本教程基于两个定量成像的例子构建: - 形态学:缓慢生长肿瘤中的小体积变化 - 功能:鳞状细胞癌中的代谢活动 第1部分:使用变化跟踪模块测量脑膜瘤的小体积变化第2部分:使用PET标…

为什么要使用Ansible实现Linux管理自动化?

自动化和Linux系统管理 多年来&#xff0c;大多数系统管理和基础架构管理都依赖于通过图形或命令行用户界面执行的手动任务。系统管理员通常使用清单、其他文档或记忆的例程来执行标准任务。 这种方法容易出错。系统管理员很容易跳过某个步骤或在某个步骤上犯错误。验证这些步…

C# 实现对指定句柄的窗口进行键盘输入的实现

在C#中实现对指定句柄的窗口进行键盘操作&#xff0c;可以通过多种方式来实现。以下是一篇详细的指南&#xff0c;介绍如何在C#中实现这一功能。 1. 使用Windows API函数 在C#中&#xff0c;我们可以通过P/Invoke调用Windows API来实现对指定窗口的键盘操作。以下是一些关键的…

JavaWeb--MySQL

1. MySQL概述 首先来了解一下什么是数据库。 数据库&#xff1a;英文为 DataBase&#xff0c;简称DB&#xff0c;它是存储和管理数据的仓库。 像我们日常访问的电商网站京东&#xff0c;企业内部的管理系统OA、ERP、CRM这类的系统&#xff0c;以及大家每天都会刷的头条、抖音…

Qt学习笔记(四)多线程

系列文章目录 Qt开发笔记&#xff08;一&#xff09;Qt的基础知识及环境编译&#xff08;泰山派&#xff09; Qt学习笔记&#xff08;二&#xff09;Qt 信号与槽 Qt学习笔记&#xff08;三&#xff09;网络编程 Qt学习笔记&#xff08;四&#xff09;多线程 文章目录 系列文章…

Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)

作者&#xff1a;来自 Elastic Ranjana Devaji, Dana Juratoni Elasticsearch 8.16 引入了 BBQ&#xff08;Better Binary Quantization - 更好的二进制量化&#xff09;—— 一种压缩向量化数据的创新方法&#xff0c;其性能优于传统方法&#xff0c;例如乘积量化 (Product Qu…

Flume和kafka的整合

1、Kafka作为Source 【数据进入到kafka中&#xff0c;抽取出来】 在flume的conf文件夹下&#xff0c;有一个flumeconf 文件夹&#xff1a;这个文件夹是自己创建的 创建一个flume脚本文件&#xff1a; kafka-memory-logger.conf Flume 1.9用户手册中文版 — 可能是目前翻译最完…

现代密码学|古典密码学例题讲解|AES数学基础(GF(2^8)有限域上的运算问题)| AES加密算法

文章目录 古典密码凯撒密码和移位变换仿射变换例题多表代换例题 AES数学基础&#xff08;GF&#xff08;2^8&#xff09;有限域上的运算问题&#xff09;多项式表示法 | 加法 | 乘法X乘法模x的四次方1的乘法 AES加密算法初始变换字节代换行移位列混合轮密钥加子密钥&#xff08…

3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)

3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用) 文章目录 3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)前言1. Spring Cloud Eureka 的概述1.1 服务治理概述1.2 服务注册与发现 2. 实践&#xff1a;创建单机 Eureka Server 注册中心2.1 需求说明 图解…

视频孪生技术在金融银行网点场景中的应用价值

作为国民经济重要的基础行业&#xff0c;金融行业在高速发展的同时衍生出业务纠纷、安全防范、职能管理等诸多问题&#xff0c;对安全防范和监督管理提出了更高的要求。因此&#xff0c;如何能更好的利用视频监控系统价值&#xff0c;让管理人员更简便的浏览监控视频、更快速的…

武汉EI学术会议一览表

武汉近期将举办BDDM2024大数据会议、ASIM2024智能制造会议、ICSGPS2025电网会议&#xff0c;吸引国内外学者参与&#xff0c;推动科技创新与产业发展&#xff0c;录用论文将提交EI索引。 武汉EI学术会议一览表 1.第二届大数据与数据挖掘国际会议&#xff08;BDDM 2024&#xf…

LeetCode Hot100 15.三数之和

题干&#xff1a; 思路&#xff1a; 首先想到的是哈希表&#xff0c;类似于两数之和的想法&#xff0c;共两层循环&#xff0c;将遍历到的第一个元素和第二个元素存入哈希表中&#xff0c;然后按条件找第三个元素&#xff0c;但是这道题有去重的要求&#xff0c;哈希表实现较为…

html + css 自适应首页布局案例

文章目录 前言一、组成二、代码1. css 样式2. body 内容3.全部整体 三、效果 前言 一个自适应的html布局 一、组成 整体居中&#xff0c;宽度1200px&#xff0c;小屏幕宽度100% 二、代码 1. css 样式 代码如下&#xff08;示例&#xff09;&#xff1a; <style>* {…

使用Axios函数库进行网络请求的使用指南

目录 前言1. 什么是Axios2. Axios的引入方式2.1 通过CDN直接引入2.2 在模块化项目中引入 3. 使用Axios发送请求3.1 GET请求3.2 POST请求 4. Axios请求方式别名5. 使用Axios创建实例5.1 创建Axios实例5.2 使用实例发送请求 6. 使用async/await简化异步请求6.1 获取所有文章数据6…