Spring Cloud GateWay 全局过滤器

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

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;
    }
}

全局过滤器是什么? 

这是一个自定义的 Spring Cloud Gateway 全局过滤器(Global Filter)。在 Spring Cloud Gateway 中,全局过滤器可以在请求被路由到目标服务之前或之后执行一些操作。这个过滤器实现了 GlobalFilter 接口和 Ordered 接口,这两个接口的作用如下:

  1. GlobalFilter 接口: 这是一个 Spring Cloud Gateway 提供的接口,用于定义全局过滤器。全局过滤器能够处理进入网关的请求和返回的响应。在这个自定义过滤器中,filter 方法被实现,它接收 ServerWebExchange 对象和 GatewayFilterChain 对象作为参数。在这个方法内部,你可以编写逻辑来处理请求,然后调用 chain.filter(exchange) 继续执行后续过滤器链和路由操作。

  2. Ordered 接口: 这是 Spring Framework 提供的接口,用于确定对象的顺序。在 Spring Cloud Gateway 中,过滤器的执行顺序非常重要,可以通过实现 Ordered 接口的 getOrder() 方法来定义过滤器的顺序。在这个例子中,过滤器的顺序被设置为 -1,这表示这个过滤器将在所有默认顺序为 0 的过滤器之前执行。

总结起来,这个自定义全局过滤器会在请求进入 Spring Cloud Gateway 时被调用,在日志中打印 "custom global filter",然后继续执行后续过滤器链和路由操作。由于实现了 Ordered 接口并返回 -1,这个过滤器将会在默认的全局过滤器之前被执行。

什么是ServerWebExchange ?

ServerWebExchange 是 Spring WebFlux 中的一个核心接口,它代表了一个服务器端的 HTTP 交换过程,包含了客户端请求和服务器响应的各种信息。在 Spring Cloud Gateway 或 Spring WebFlux 应用中,它被广泛用于处理和操作 HTTP 请求和响应。

ServerWebExchange 接口提供了许多方法,用于获取和操作与 HTTP 请求和响应相关的信息,包括:

  • getRequest(): 获取代表客户端请求的 ServerRequest 对象,可以从中获取请求方法、URI、请求头、请求参数等信息。

  • getResponse(): 获取代表服务器响应的 ServerResponse 对象,可以从中设置响应状态码、响应头、响应体等信息。

  • getAttributes(): 获取一个属性的键值对集合,可以用于在不同的过滤器之间共享数据。

  • mutate(): 复制当前的 ServerWebExchange 并进行修改,用于创建一个新的 ServerWebExchange 对象。

  • getPrincipal(): 获取当前用户的身份信息,通常用于鉴权和认证。

  • getFormData(): 获取表单数据,通常在 POST 请求中解析表单数据。

在自定义过滤器、处理器函数和其他与请求响应处理相关的地方,你可以使用 ServerWebExchange 对象来获取和操作与请求响应相关的信息。这个接口的灵活性使得你能够在 Spring WebFlux 应用中进行各种自定义的处理和操作。

什么是Spring WebFlux?

Spring WebFlux 是 Spring Framework 的一个模块,用于构建响应式(Reactive)的 Web 应用程序。与传统的基于 Servlet 的 Spring MVC 不同,Spring WebFlux 基于反应式编程模型,旨在处理高并发、高吞吐量的场景,以及需要实时性和低延迟的应用程序。

反应式编程是一种面向数据流和变化传播的编程范式,其核心概念是异步数据流和非阻塞操作。在 Spring WebFlux 中,你可以使用响应式流库(如 Reactor)来处理数据流,使得应用程序能够更有效地利用资源,并且能够应对大量的并发请求。

Spring WebFlux 提供了两种编程模型:

  1. 注解式模型: 类似于传统的 Spring MVC,你可以使用注解来定义处理器函数(Handler Functions),并且可以使用像 @RequestMapping 这样的注解来映射请求。

  2. 函数式模型: 使用函数式编程的方式定义处理器函数,这种方式更加灵活,可以更好地与响应式编程模型结合。

Spring WebFlux 可以用于构建多种类型的 Web 应用程序,包括传统的 Web 应用程序、RESTful API、实时推送、反应式流式处理等。它也是构建 Spring Cloud Gateway 这样的微服务网关的基础。总之,Spring WebFlux 为 Spring 生态系统提供了响应式编程能力,使得应用程序能够更好地适应现代的高并发和实时性需求。文章来源地址https://www.toymoban.com/news/detail-677375.html

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

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

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

相关文章

  • Spring Cloud Gateway过滤器GlobalFilter详解

    一、过滤器的场景 在springCloud架构中,网关是必不可少的组件,它用于服务路由的转发。对客户端进行屏蔽微服务的具体细节,客户端只需要和网关进行交互。所以网关顾名思义,就是网络的一个关卡。它就是一座城的城门守卫。所以这个守卫就可以做很多工作,比如对来访

    2024年02月14日
    浏览(29)
  • 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

领红包