热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloudGateway–过滤法则

1、AddRequestHeader GatewayFilter Factory 输入两个参数:Header Name、Value,向下游请求地址添加 Header 信息,示例配置:
Spring Cloud Gateway - 过滤法则

1、AddRequestHeader GatewayFilter Factory

输入两个参数:Header Name、Value,向下游请求地址添加 Header 信息,示例配置:

spring: cloud: gateway: routes: - id: add_request_header_route uri: https://anoyi.com filters: - AddRequestHeader=X-Request-Foo, Bar

AddRequestHeader 结合 Path 路由,再添加 Header 信息,示例配置:

spring: cloud: gateway: routes: - id: add_request_header_route uri: https://anoyi.com predicates: - Path=/foo/{segment} filters: - AddRequestHeader=X-Request-Foo, Bar-{segment}

2、AddRequestParameter GatewayFilter Factory

输入两个参数:Request Query Name、Value,向下游请求地址添加 URL 参数信息,示例配置:

spring: cloud: gateway: routes: - id: add_request_parameter_route uri: https://anoyi.com filters: - AddRequestParameter=foo, bar

AddRequestParameter 结合 Host 路由,再添加 URL 参数信息,示例配置:

spring: cloud: gateway: routes: - id: add_request_parameter_route uri: https://anoyi.com predicates: - Host: {segment}.anoyi.io filters: - AddRequestParameter=foo, bar-{segment}

5、AddResponseHeader GatewayFilter Factory

输入两个参数:Header Name、Value,下游请求完成后在 Response 添加 Header 信息,示例配置:

spring: cloud: gateway: routes: - id: add_response_header_route uri: https://anoyi.com filters: - AddRespOnseHeader=X-Response-Foo, Bar

6、DedupeResponseHeader GatewayFilter Factory

输入两个参数:Header Name、Strategy【可选】,Header Name 可以多个,用空格隔开,示例配置:

spring: cloud: gateway: routes: - id: dedupe_response_header_route uri: https://anoyi.com filters: - DedupeRespOnseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin

如上所示,当下游和 Spring Cloud Gateway 都设置跨域时,将在 Response Header 中移除重复的 Access-Control-Allow-CredentialsAccess-Control-Allow-Origin

strategy 可设置的值以及配置方式如下:

  • RETAIN_FIRST:保留第一个值【默认】
  • RETAIN_LAST:保留最后一个值
  • RETAIN_UNIQUE:保留所有唯一值,以它们第一次出现的顺序保留

spring: cloud: gateway: routes: - id: dedupe_response_header_route uri: https://anoyi.com filters: - DedupeRespOnseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin, RETAIN_LAST

参考文档:DedupeResponseHeaderGatewayFilterFactory

7、MapRequestHeader GatewayFilter Factory

输入两个参数:Header1、Header2,将上游 Header1 的值赋值到下游 Header2,示例配置:

spring: cloud: gateway: routes: - id: map_request_header_route uri: https://example.org filters: - MapRequestHeader=Bar, X-Request-Foo

8、PrefixPath GatewayFilter Factory

输入一个参数:prefix,在请求路径中添加前缀路径,示例配置:

spring: cloud: gateway: routes: - id: prefixpath_route uri: https://example.org filters: - PrefixPath=/mypath

如上所示,/hello 请求会转发到下游的 /mypath/hello

9、【待补充】RequestRateLimiter GatewayFilter Factory

请求频率控制,示例配置:

参考文档:requestratelimiter-gatewayfilter-factory

10、RedirectTo GatewayFilter Factory

输入两个参数:Status Code、URL,将在 Response 中把 URL 赋值给 Location 属性,示例配置:

spring: cloud: gateway: routes: - id: prefixpath_route uri: https://anoyi.com filters: - RedirectTo=302, https://anoyi.org

Status Code 需要为 300 系列的重定向值,比如 301 等

11、RemoveHopByHopHeadersFilter GatewayFilter Factory

默认删除的 Headers 如下:

  • Connection
  • Keep-Alive
  • Proxy-Authenticate
  • Proxy-Authorization
  • TE
  • Trailer
  • Transfer-Encoding
  • Upgrade

如需更改此选项,配置 spring.cloud.gateway.filter.remove-non-proxy-headers.headers 即可

12、RemoveRequestHeader GatewayFilter Factory

输入一个参数:Header Name,请求下游前移除指定 Header,示例配置:

spring: cloud: gateway: routes: - id: removerequestheader_route uri: https://anoyi.com filters: - RemoveRequestHeader=X-Request-Foo

13、RemoveResponseHeader GatewayFilter Factory

输入一个参数:Header Name,下游请求完毕后移除 Response 指定 Header,示例配置:

spring: cloud: gateway: routes: - id: removeresponseheader_route uri: https://anoyi.com filters: - RemoveRespOnseHeader=X-Response-Foo

14、 RemoveRequestParameter GatewayFilter Factory

输入一个参数:Query Name,请求下游前移除指定 Query Name,示例配置:

spring: cloud: gateway: routes: - id: removerequestparameter_route uri: https://anoyi.com filters: - RemoveRequestParameter=foo

15、RewritePath GatewayFilter Factory

输入两个参数:正则表达式、替代值,匹配请求路径并按指定规则替换,示例配置:

spring: cloud: gateway: routes: - id: rewritepath_route uri: https://anoyi.com predicates: - Path=/foo/** filters: - RewritePath=/foo(?/?.*), ${segment}

如上所以,如果请求 /foo/bar,则请求下游时 Path 会被修改为 /bar ,注意 $ 是 YAML 语法的需求

16、RewriteLocationResponseHeader GatewayFilter Factory

输入四个参数:stripVersionModelocationHeaderNamehostValueprotocolsRegex,修改 Response Header 的 Location,示例配置:

spring: cloud: gateway: routes: - id: rewritelocationresponseheader_route uri: http://anoyi.com filters: - RewriteLocatiOnResponseHeader=AS_IN_REQUEST, Location, ,

如上所示,一个请求 POST api.anoyi.com/some/object/name, Response header Location 的值 prod.anoyi.com/v2/some/object/id 将被改为 api.anoyi.com/some/object/id

参数 stripVersionMode 可选值如下:

  • NEVER_STRIP:版本信息不会被剥离,即使原始请求路径不包含版本
  • AS_IN_REQUEST:仅当原始请求路径不包含任何版本时,才会剥离版本【默认】
  • ALWAYS_STRIP:即使原始请求路径包含版本,也会剥离版本

参数 hostValue,如果提供,会替换 Response Header Location 值中的 host:port 部分;如果不提供,则会使用 Request 的 Host 作为默认值

参数 protocolRegex,协议会与该值匹配,如果不匹配,过滤器不回做任何操作,默认值 http|https|ftp|ftps

17、RewriteResponseHeader GatewayFilter Factory

输入三个参数:Response Header Name、正则表达式、替换值,匹配指定 Response Header 的值并替换,示例配置:

spring: cloud: gateway: routes: - id: rewriteresponseheader_route uri: https://anoyi.com filters: - RewriteRespOnseHeader=X-Response-Foo, , password=[^&]+, password=***

如上所示,假设 X-Response-Foo 值为 /42?user=ford&password=omg!what&flag=true,会被重置为 /42?user=ford&password=***&flag=true

18、【待补充】SaveSession GatewayFilter Factory

示例配置:

spring: cloud: gateway: routes: - id: save_session uri: https://anoyi.com predicates: - Path=/foo/** filters: - SaveSession

19、SecureHeaders GatewayFilter Factory

依据 Everything you need to know about HTTP security headers 这篇文章,该过滤器在 Response 中添加了一系列 Header 及默认值:

  • X-Xss-Protection:1; mode=block
  • Strict-Transport-Security:max-age=631138519
  • X-Frame-Options:DENY
  • X-Content-Type-Options:nosniff
  • Referrer-Policy:no-referrer
  • Content-Security-Policy:default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'
  • X-Download-Options:noopen
  • X-Permitted-Cross-Domain-Policies:none

如需修改默认值,可以通过 spring.cloud.gateway.filter.secure-header 命名空间来设置:

  • xss-protection-header
  • strict-transport-security
  • frame-options
  • content-type-options
  • referrer-policy
  • content-security-policy
  • download-options
  • permitted-cross-domain-policies

禁用默认 Header 可以配置 spring.cloud.gateway.filter.secure-headers.disable,示例:

spring.cloud.gateway.filter.secure-headers.disable=frame-options,download-options

20、SetPath GatewayFilter Factory

输入一个参数:template,匹配 Spring Framework URI 路径模板并修改,允许多个匹配,示例配置:

spring: cloud: gateway: routes: - id: setpath_route uri: https://anoyi.com predicates: - Path=/foo/{segment} filters: - SetPath=/{segment}

如上所示,请求 /foo/bar 会被设置为 /bar 到下游

21、SetRequestHeader GatewayFilter Factory

输入两个参数:Header Name、Value,设置指定的 Request Header 信息,示例配置:

spring: cloud: gateway: routes: - id: setrequestheader_route uri: https://anoyi.com filters: - SetRequestHeader=X-Request-Foo, Bar

AddRequestHeader GatewayFilter Factory 不同的是,这是替换 Header 而不是添加

22、SetResponseHeader GatewayFilter Factory

输入两个参数:Header Name、Value,设置指定的 Response Header 信息,示例配置:

spring: cloud: gateway: routes: - id: setresponseheader_route uri: https://example.org filters: - SetRespOnseHeader=X-Response-Foo, Bar

23、SetStatus GatewayFilter Factory

输入一个参数:status,设置 Response 的返回码,示例配置:

spring: cloud: gateway: routes: - id: setstatusstring_route uri: https://anoyi.com filters: - SetStatus=BAD_REQUEST - id: setstatusint_route uri: https://anoyi.com filters: - SetStatus=401

如上所示,setstatusstring_route 的值为 Spring HttpStatus 枚举,setstatusint_route 的值为整型数字

如需返回下游的 Response Status Code,可以这样配置:

spring: cloud: gateway: set-status: original-status-header-name: original-http-status

24、StripPrefix GatewayFilter Factory

输入一个参数:parts,parts 值为正整数,剥离部分请求路径,示例配置:

spring: cloud: gateway: routes: - id: nameRoot uri: https://anoyi.com predicates: - Path=/name/** filters: - StripPrefix=2

如上所示,请求路径 /name/foo/bar,会剥离前面 2 级路径 /name/foo,最终请求到 https://anoyi.com/bar

25、Retry GatewayFilter Factory

该过滤器用于重试请求,支持如下参数的配置:

  • retries: 重试的次数

  • statuses: 应被重试的 HTTP Status Codes,参考 org.springframework.http.HttpStatus

  • methods: 应被重试的 HTTP Methods,参考org.springframework.http.HttpMethod

  • series: 应被重试的 Status Codes 系列,参考 org.springframework.http.HttpStatus.Series

  • exceptions: 应被重试的异常列表

  • backoff: 为重试配置指数级的 backoff。重试时间间隔的计算公式为 firstBackoff * (factor ^ n),n 是重试的次数;如果设置了 maxBackoff,最大的 backoff 限制为 maxBackoff. 如果 basedOnPreviousValue 设置为 true, backoff 计算公式为 prevBackoff * factor.

如果 Retry filter 启用,默认配置如下:

  • retries — 3 times
  • series — 5XX series
  • methods — GET method
  • exceptions — IOException and TimeoutException
  • backoff — disabled

示例配置:

spring: cloud: gateway: routes: - id: retry_test uri: http://localhost:8080/anoyi predicates: - Host=*.anoyi.com filters: - name: Retry args: retries: 3 statuses: BAD_GATEWAY backoff: firstBackoff: 10ms maxBackoff: 50ms factor: 2 basedOnPreviousValue: false

26、 RequestSize GatewayFilter Factory

限制请求到下游服务的 RequestSize,示例配置:

spring: cloud: gateway: routes: - id: request_size_route uri: http://localhost:8080/upload predicates: - Path=/upload filters: - name: RequestSize args: maxSize: 5000000

27、Default Filters

为所有的路由配置过滤器,可以设置 spring.cloud.gateway.default-filters,示例配置:

spring: cloud: gateway: default-filters: - AddRespOnseHeader=X-Response-Default-Foo, Default-Bar - PrefixPath=/httpbin

推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 无详细内容MySQLmysqlmysqlDELIMITERmysqlCREATEFUNCTIONmyProc(costDECIMAL(10,2))-RETURNSDECIMAL(1 ... [详细]
author-avatar
aGreadyCat__895
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有