Spring Cloud Gateway GlobalFilter(全局过滤器)详解(官方原版)

这篇具有很好参考价值的文章主要介绍了Spring Cloud Gateway GlobalFilter(全局过滤器)详解(官方原版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

GlobalFilter接口具有与GatewayFilter相同的签名。这些是有条件地应用于所有路由的特殊过滤器。

二、组合式全局过滤器和网关过滤器排序

当请求与路由匹配时,过滤web处理程序会将GlobalFilter的所有实例和GatewayFilter的所有路由特定实例添加到过滤器链中。这个组合过滤器链由org.springframework.core.Ordered接口排序,您可以通过实现getOrder()方法来设置该接口,值越小,越先执行

由于Spring Cloud Gateway区分了过滤器逻辑执行的“pre” 和 “post” 阶段(请参阅其工作原理),优先级最高的过滤器是“pre”阶段的第一个,“post”的最后一个。

以下列表配置过滤器链:

示例63. ExampleConfiguration.java

@Bean
public GlobalFilter customFilter() {
    return new CustomGlobalFilter();
}

public class CustomGlobalFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("custom global filter");
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return -1;
    }  #值越小,越先执行
}

三、 Gateway Metrics Filter

要启用网关指标,请添加spring-bootstarter执行器作为项目依赖项。然后,默认情况下,只要spring.cloud.gateway.metrics.enabled属性未设置为false,网关度量过滤器就会运行。此筛选器添加了一个名为spring.cloud.gateway.requests的计时器度量,并带有以下标记:

  • routeId:路由 ID。

  • routeUri:API 路由到的 URI。

  • outcome:结果,按 HttpStatus.Series 分类。

  • status:返回给客户端的请求的 HTTP 状态。

  • httpStatusCode:返回到客户端的请求的 HTTP 状态。

  • httpMethod:用于请求的 HTTP 方法。

此外,通过spring.cloud.gateway.metrics.tags.path.enabled属性(默认为false),您可以使用路径标记激活额外的指标:

  • path:请求的路径。

这些指标可以从/actuator/metrics/spring.cloud.gateway.requests中获取,并可以与Prometheus轻松集成以创建Grafana仪表板。

四、本地响应缓存过滤器

如果LocalResponseCache的关联属性已启用(spring.cloud.gateway.filter.localresponse-cache.enabled),则LocalResponceCache将运行,并使用咖啡因为满足以下条件的所有响应激活本地缓存:

  • 请求是一个脱胎换骨的GET。

  • 响应具有以下状态代码之一:HTTP 200(正常)、HTTP 206(部分内容)或HTTP 301(永久移动)。

  • HTTP Cache-Control标头允许缓存(这意味着它没有以下任何值:请求中没有存储,响应中没有存储或私有)。

它接受两个配置参数:

  • spring.cloud.gateway.filter.local-response-cache.size:设置缓存的最大大小以清除此路由的条目(以KB、MB和GB为单位)。

  • spring.cloud.gateway.filter.local-response-cache.timeToLive:设置缓存项的过期时间(以秒表示,以分钟表示,以小时表示)。

如果未配置这些参数,但启用了全局筛选器,则默认情况下,它会为缓存的响应配置5分钟的生存时间。

此筛选器还实现了HTTP Cache-Control中max-age 值的自动计算。如果原始响应中存在max-age,则使用timeToLive配置参数中设置的秒数重写该值。在随后的调用中,该值将根据响应到期前剩余的秒数重新计算。

五、转发路由过滤器

ForwardRoutingFilter在交换属性ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR中查找URI。如果URL具有转发方案(例如forward:///localendpoint),它使用SpringDispatcherHandler来处理请求。请求URL的路径部分被转发URL中的路径覆盖。未修改的原始URL将附加到ServerWebExchangeUtils.GATEWAY_original_REQUEST_URL_ATTR属性的列表中。

六、 网络路由过滤器

如果位于ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交换属性中的URL具有http或https方案,则运行Netty路由筛选器。它使用Netty HttpClient发出下游代理请求。响应被放入ServerWebExchangeUtils.CLIENT_response_ATTR交换属性中,以便在稍后的筛选器中使用。(还有一个实验性的WebClientHttpRoutingFilter,它执行相同的功能,但不需要Netty。)

七、网络写入响应过滤器

如果ServerWebExchangeUtils.CLIENT_RESPONSE_ATTR交换属性中存在Netty HttpClientResponse,则运行NettyWriteResponseFilter。它在所有其他筛选器完成后运行,并将代理响应写回网关客户端响应。(还有一个实验性WebClientWriteResponseFilter,它执行相同的功能,但不需要Netty。)

八、反应式负载均衡器客户端过滤器

ReactiveLoadBalancerClientFilter在名为ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR的交换属性中查找URI。如果URL具有lb方案(例如lb://myservice),则使用Spring Cloud ReactorLoadBalancer将名称(在本例中为myservice)解析为实际主机和端口,并替换同一属性中的URI。未修改的原始URL将附加到ServerWebExchangeUtils.GATEWAY_original_REQUEST_URL_ATTR属性的列表中。过滤器还查看ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR属性,以查看其是否等于lb。如果是,则应用相同的规则。以下列表配置ReactiveLoadBalancerClientFilter:

spring:
  cloud:
    gateway:
      routes:
      - id: myRoute
        uri: lb://service
        predicates:
        - Path=/service/**

九、路由到请求网址过滤器

如果ServerWebExchangeUtils.GATEWAY_Route_ATTR交换属性中有Route对象,则RouteToRequestUrlFilter将运行。它基于请求URI创建一个新的URI,但使用Route对象的URI属性进行更新。新URI放置在ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交换属性中。

如果URI具有方案前缀,例如lb:ws://serviceid,则会从URI中剥离lb方案,并将其放置在ServerWebExchangeUtils.GATEWAY_scheme_prefix_ATTR中,以便稍后在筛选器链中使用。

十、Websocket 路由过滤器

如果位于ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交换属性中的URL具有ws或wss方案,则会运行websocket路由筛选器。它使用Spring WebSocket基础设施将WebSocket请求转发到下游。

您可以通过在URI前面加上lb(例如lb:ws://serviceid)来负载平衡websockets。

以下清单配置 websocket 路由筛选器:

spring:
  cloud:
    gateway:
      routes:
      # SockJS route
      - id: websocket_sockjs_route
        uri: http://localhost:3001
        predicates:
        - Path=/websocket/info/**
      # Normal Websocket route
      - id: websocket_route
        uri: ws://localhost:3001
        predicates:
        - Path=/websocket/**

官网:spring-cloud-gateway

欢迎来到Doker,欢迎点赞和评论!或者加微信进入技术群聊!文章来源地址https://www.toymoban.com/news/detail-703656.html

到了这里,关于Spring Cloud Gateway GlobalFilter(全局过滤器)详解(官方原版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud Gateway 过滤器详解

    Spring Cloud Gateway根据作用范围划分为:GatewayFilter和GlobalFilter 由filter工作流程点,可以知道filter有着非常重要的作用,在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输

    2023年04月08日
    浏览(27)
  • Spring Cloud Gateway快速入门(三)——过滤器

    Gateway过滤器是Spring Cloud Gateway提供的一种机制,用于对进入网关的请求和返回进行处理和转换。它可以用于实现各种功能,如请求鉴权、请求转发、请求限流、请求重试等。 网关过滤器是Spring Cloud Gateway提供的一种机制,用于在请求进入网关和响应离开网关时进行一些预处理

    2024年02月04日
    浏览(35)
  • Spring Cloud Gateway 过滤器 StripPrefix=1 的作用

    StripPrefix=1 是 Spring Gateway 中的一个过滤器,它用于去除请求的前缀路径。 当配置了 StripPrefix=1 过滤器后,如果请求的路径中存在前缀路径,该过滤器将会去除指定数量的前缀路径。具体而言,StripPrefix=1 表示去除请求路径的第一个路径片段(即前缀路径)。 例如,假设你的路

    2024年02月04日
    浏览(29)
  • Spring Cloud Gateway内置的断言和过滤器作用

    对应版本3.1.7对应SpringCloud版本2021.0.7 AfterRoutePredicateFactory 作用:判断当请求时间是否在指定配置时间之后 使用方式 使用场景:当上线一新服务时在未来某个时间提供服务 两种配置方式的区别: 第一种便捷方式配置的值是按逗号分隔,再按shortcutFieldOrder方法返回的字段顺序

    2024年02月06日
    浏览(34)
  • Spring-Cloud-Gateway如何自定义路由过滤器?

    遇到这么一个面试题:自定义网关过滤器实现把url中的请求参数放到http的header中传递给微服务。 我们知道网关的一个重要的作用就是路由转发,路由表的配置大概是这个样子: 其中的filters就是配置的路由过滤器,Spring已经内置了31个路由的过滤器,这些过滤器都是 org.spring

    2024年02月16日
    浏览(28)
  • 从Spring Cloud Gateway过滤器中获取请求体的最优方案

    在spring cloud gateway出现这个问题的时候我们第一反应应该很简单,但是真正实现的时候却有点困难。我看了很多相关的文档,感觉太多都不清晰而且解决不了问题。下面我就把我的方便理解的解决方案写下来。 1. 先重写请求体(过滤器优先级一定要在要获取body之前执行) 这

    2024年02月16日
    浏览(34)
  • SpringCloud - Spring Cloud 之 Gateway网关,Route路由,Predicate 谓词/断言,Filter 过滤器(十三)

    阅读本文前可先参考 ​​​​​​SpringCloud - Spring Cloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客 SpringCloud - Spring Cloud 之 Gateway网关(十三)_MinggeQingchun的博客-CSDN博客 Web 有三大组件(监听器 过滤器 servlet),Spring Cloud GateWay 最主要的功能就是路由转发,而在定义

    2024年02月14日
    浏览(51)
  • Gateway自定义过滤器——全局过滤器

    首先,我们要知道全局过滤器其实是特殊路由过滤器(特殊的GatewayFilter),会有条件地作用于所有路由。 为什么要自定义全局过滤器?就好比是看大门的保安大叔,平时主要是做好进出大门外来人员登记即可,但是因为新冠疫情,现在还需要给外来人员测量体温等等。而已有的

    2024年02月16日
    浏览(29)
  • Gateway网关 全局过滤器

    一、全局过滤器 全局过滤器GlobalFilter 全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。 区别在于GatewayFilter通过配置定义,处理逻辑是固定的。 需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件: 参数中是否有au

    2024年02月07日
    浏览(33)
  • SpringCloud GateWay 在全局过滤器中注入OpenFeign网关后无法启动

    目录 一、问题 二、原因 1、修改配置 2、添加@Lazy注解在client上面  3、启动成功 当在gateway的全局过滤器GlobalFilter中注入OpenFeign接口的时候会一直卡在路由中,但是不会进一步,导致启动未成功也未报错失败 在gateway网关中不能使用openfeign同步调用 三、解决方法 在注入的Aut

    2024年01月19日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包