Spring Cloud Gateway快速入门(三)——过滤器

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

前言

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

Gateway内置网关过滤器

什么是网关过滤器

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

网关过滤器可以分为全局过滤器、前置过滤器和后置过滤器。全局过滤器会在请求进入网关时被调用,前置过滤器会在路由匹配之前被调用,后置过滤器会在路由匹配之后被调用。

Gateway内置网关过滤器

GlobalFilter

全局过滤器是在请求进入网关时被调用的过滤器。它可以用于实现一些全局的功能,如请求鉴权、请求转发等。

public class MyGlobalFilter implements GlobalFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 在此处编写全局过滤器的逻辑
        return chain.filter(exchange);
    }
}

PreFilter

前置过滤器是在路由匹配之前被调用的过滤器。它可以用于对请求进行一些预处理操作,如请求鉴权、请求转发等。

public class MyPreFilter implements GatewayFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 在此处编写前置过滤器的逻辑
        return chain.filter(exchange);
    }
}

PostFilter

后置过滤器是在路由匹配之后被调用的过滤器。它可以用于对响应进行一些后处理操作,如响应转换、响应加密等。

public class MyPostFilter implements GatewayFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 在此处编写后置过滤器的逻辑
        return chain.filter(exchange);
    }
}

使用示例

下面是一个使用全局过滤器、前置过滤器和后置过滤器的示例:

@Configuration
public class GatewayConfig {

    @Bean
    public MyGlobalFilter myGlobalFilter() {
        return new MyGlobalFilter();
    }

    @Bean
    public MyPreFilter myPreFilter() {
        return new MyPreFilter();
    }

    @Bean
    public MyPostFilter myPostFilter() {
        return new MyPostFilter();
    }

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("route1", r -> r.path("/api/**")
                        .filters(f -> f.filter(myPreFilter()).filter(myPostFilter()))
                        .uri("http://example.com"))
                .build();
    }
}

在上面的示例中,我们定义了一个全局过滤器MyGlobalFilter、一个前置过滤器MyPreFilter和一个后置过滤器MyPostFilter。然后,我们使用RouteLocatorBuilder来创建一个自定义的路由定位器,并在路由定义中使用了这些过滤器。

通过以上配置,当请求的路径匹配到/api/**时,会先经过MyPreFilter进行预处理,然后经过路由转发,最后经过MyPostFilter进行后处理。

以上就是关于Gateway内置网关过滤器的介绍和使用示例。通过使用这些过滤器,我们可以方便地实现各种功能和处理逻辑,提升网关的灵活性和可扩展性。

Gateway全局网关过滤器

什么是全局网关过滤器

全局网关过滤器是Spring Cloud Gateway提供的一种机制,用于在请求进入网关时进行一些预处理操作。全局网关过滤器会在所有路由之前被调用,可以用于实现一些全局的功能,如请求鉴权、请求转发等。

使用全局网关过滤器

要使用全局网关过滤器,我们需要实现GlobalFilter接口,并重写filter()方法。在filter()方法中,我们可以编写我们的过滤器逻辑。

import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

public class MyGlobalFilter implements GlobalFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 在此处编写全局过滤器的逻辑
        return chain.filter(exchange);
    }
}

在上面的示例中,我们创建了一个名为MyGlobalFilter的全局过滤器类,并实现了GlobalFilter接口。在filter()方法中,我们可以编写我们的全局过滤器逻辑。最后,我们使用chain.filter(exchange)来继续请求的处理。

注册全局网关过滤器

要注册全局网关过滤器,我们需要将其作为一个Bean进行注册。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GatewayConfig {

    @Bean
    public MyGlobalFilter myGlobalFilter() {
        return new MyGlobalFilter();
    }
}

在上面的示例中,我们创建了一个名为GatewayConfig的配置类,并在其中将MyGlobalFilter作为一个Bean进行注册。这样,全局网关过滤器就会被自动加载到Spring Cloud Gateway中。

使用全局网关过滤器

要使用全局网关过滤器,我们只需要在过滤器中编写我们的逻辑即可。下面是一个使用全局网关过滤器的示例:

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

public class MyGlobalFilter implements GlobalFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 在此处编写全局过滤器的逻辑
        // 检查请求头中是否包含特定的Token
        String token = exchange.getRequest().getHeaders().getFirst("Token");
        if (token == null || token.isEmpty()) {
            // 如果Token为空,则返回未授权的响应
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        // 如果Token存在,则继续处理请求
        return chain.filter(exchange);
    }
}

在上面的示例中,我们在全局网关过滤器中检查请求头中是否包含特定的Token。如果Token为空,则返回未授权的响应;如果Token存在,则继续处理请求。

通过使用全局网关过滤器,我们可以方便地实现全局的功能和处理逻辑,提升网关的灵活性和可扩展性。

以上就是关于Gateway全局网关过滤器的介绍和使用示例。通过使用全局网关过滤器,我们可以在请求进入网关时进行一些全局的预处理操作,实现各种功能和处理逻辑。

全局网关过滤器和Gateway内置网关过滤器的区别

全局网关过滤器和Gateway内置网关过滤器是Spring Cloud Gateway提供的两种不同的过滤器机制。它们之间有以下区别:

1. 注册方式

  • 全局网关过滤器:需要将其作为一个Bean进行注册,通过@Configuration注解的配置类或者通过@Bean注解的方法进行注册。
  • Gateway内置网关过滤器:内置在Spring Cloud Gateway中,无需手动注册。

2. 执行顺序

  • 全局网关过滤器:在所有路由之前被调用,可以用于实现一些全局的功能,如请求鉴权、请求转发等。
  • Gateway内置网关过滤器:根据过滤器的类型和顺序进行调用,可以在请求被路由到目标服务之前或之后进行处理。

3. 自定义能力

  • 全局网关过滤器:可以根据实际需求自定义过滤器逻辑,实现各种功能和处理逻辑。
  • Gateway内置网关过滤器:提供了一些常用的过滤器,如请求头修改、请求日志记录等,但功能相对有限。如果需要更复杂的过滤器逻辑,可能需要自定义全局过滤器。

4. 灵活性和可扩展性

  • 全局网关过滤器:由开发者自行实现,具有较高的灵活性和可扩展性,可以根据实际需求自由定制过滤器逻辑。
  • Gateway内置网关过滤器:提供了一些常用的过滤器,可以快速实现一些基本功能,但功能相对有限,无法满足所有需求。

综上所述,全局网关过滤器和Gateway内置网关过滤器都是Spring Cloud Gateway提供的过滤器机制,它们在注册方式、执行顺序、自定义能力以及灵活性和可扩展性方面存在一些区别。开发者可以根据实际需求选择合适的过滤器机制来实现网关的功能和处理逻辑。

总结

总结Gateway过滤器的关键点如下:

  1. 过滤器类型:Gateway过滤器分为全局过滤器和路由过滤器两种类型。

    • 全局过滤器:在所有路由之前被调用,用于实现一些全局的功能,如请求鉴权、请求转发等。
    • 路由过滤器:根据路由规则进行调用,可以在请求被路由到目标服务之前或之后进行处理。
  2. 过滤器执行顺序:Gateway过滤器的执行顺序由它们的优先级和添加顺序决定。

    • 全局过滤器的执行顺序由它们在应用中的注册顺序决定。
    • 路由过滤器的执行顺序由它们在路由规则中的定义顺序决定。
  3. 过滤器的注册和使用:

    • 全局过滤器:需要将其作为一个Bean进行注册,通过@Configuration注解的配置类或者通过@Bean注解的方法进行注册。
    • 路由过滤器:在路由规则中定义,并与具体的路由关联。
  4. 自定义过滤器:可以根据实际需求自定义过滤器逻辑,实现各种功能和处理逻辑。

    • 实现GatewayFilter接口来创建自定义过滤器。
    • 实现GlobalFilter接口来创建全局过滤器。
  5. 内置过滤器:Spring Cloud Gateway提供了一些常用的内置过滤器,如请求头修改、请求日志记录等。

    • 可以直接在路由规则中使用内置过滤器,也可以通过自定义过滤器链来使用。

通过使用Gateway过滤器,我们可以在请求进入网关时进行一些预处理操作,实现各种功能和处理逻辑,提升网关的灵活性和可扩展性。文章来源地址https://www.toymoban.com/news/detail-765861.html

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

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

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

相关文章

  • 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 GlobalFilter(全局过滤器)详解(官方原版)

    GlobalFilter接口具有与GatewayFilter相同的签名。这些是有条件地应用于所有路由的特殊过滤器。 当请求与路由匹配时,过滤web处理程序会将GlobalFilter的所有实例和GatewayFilter的所有路由特定实例添加到过滤器链中。这个组合过滤器链由org.springframework.core.Ordered接口排序,您可以通

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

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

    2024年02月16日
    浏览(28)
  • 【Spring Cloud】深入探索统一网关 Gateway 的搭建,断言工厂,过滤器工厂,全局过滤器以及跨域问题

    在微服务架构中,网关是至关重要的组件,具有多重职责,为整个系统提供了一系列关键功能。从下面的微服务结构图中,我们可以明确网关的几项主要作用: 微服务结构图: 请求过滤与安全: 用户的所有请求首先经过网关,这使得网关成为系统的第一道防线。通过对传入

    2024年02月07日
    浏览(36)
  • 从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-过滤器执行顺序

    请求进入网关会碰到三类过滤器:当前路由过滤器、DefaultFilter、GlobalFilter。 请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器 过滤器执行顺序 1.每一个过滤器都必须指定一个int类型的order值,order值越小

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

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

    2024年02月07日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包