SpringCloudGateway学习(2)-过滤器

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

1.简介

 Gateway 作用:过滤器就是在请求的传递过程中,对请求和响应做一些手脚。

 Gateway 生命周期:Pre Post。

  • PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
  • POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。

Gateway 分类:局部过滤器全局过滤器

  • 局部过滤器(GatewayFilter):应用到单个路由或者一个分组的路由上。
  • 全局过滤器(GlobalFilter):应用到所有的路由上。

2. 配置方式

   过滤器的配置分为两种方式,一种是通过配置文件的方式,一种是通过编码的方式。

2.1 配置文件方式

#这种是局部过滤器配置
spring:
  cloud:
    gateway:
      routes:
      - id: resource
        uri: http://localhost:9000
        predicates:
        - Path=/resource
        filters:
        - TokenRelay=



#这种是全局过滤器配置,只需要设置default-filters就可以了

spring:
  cloud:
    gateway:
      default-filters:
      - AddResponseHeader=X-Response-Default-Red, Default-Blue
      - PrefixPath=/httpbin

2.2编码方式

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
            .route("resource", r -> r.path("/resource")
                    .filters(f -> f.tokenRelay())
                    .uri("http://localhost:9000"))
            .build();
}

3. 过滤器分类

 3.1 局部过滤器(GatewayFilter)

    局部过滤器(GatewayFilter)是针对单个路由的过滤器,对访问的URL过滤,切面处理。在Spring Cloud Gateway中通过GatewayFilter的形式内置了很多不同类型的局部过滤器。内置了31种过滤器。

序号 过滤器 作用 参数名 参数值 示例(filters配置) 备注
1 AddRequestHeader 添加请求头 name,value 添加的请求头及其值 AddRequestHeader=X-Request-red, blue
2 AddRequestParameter 在Query String中添加请求参数,参数值可以是变量,具体值可以从PATH或Host中匹配 name,value 添加的参数名及其值 AddRequestParameter=foo, bar-{segment}
3 AddResponseHeader 添加响应头 name,value 添加的响应头及其值 AddResponseHeader=X-Response-Red, Blue
4 DedupeResponseHeader 过滤重复响应头 name,strategy 需要过滤的响应头及策略(保留第一个,保留最后一个,保留唯一值) DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
5 CircuitBreaker 熔断器 name,fallbackUri,statusCodes 熔断器名称、熔断后的默认URI、熔断触发状态 #NAME? 使用熔断器需配置spring-cloud-starter-circuitbreaker-reactor-resilience4j,详见Resilience4J Documentation
6 FallbackHeaders 指定发生熔断时fallback响应头 executionExceptionTypeHeaderName, executionExceptionMessageHeaderName, rootCauseExceptionTypeHeaderName, rootCauseExceptionMessageHeaderName 异常类型、详情、根因类型、根因详情等响应头名称 executionExceptionTypeHeaderName: Test-Header
7 MapRequestHeader 添加新的请求头,值从已有请求头中获取 fromHeader,toHeader 已有请求头名称,新请求头名称 MapRequestHeader=Blue, X-Request-Red
8 PrefixPath 请求路径增加前缀 prefix 需增加的前缀 PrefixPath=/mypath
9 PreserveHostHeader 配置是否将原始请求头发送到服务方 - - PreserveHostHeader
10 RequestRateLimiter 请求频度控制 - - 默认提供了基于Redis的频度控制过滤器,也可以自定义
11 RedirectTo 重定向过滤器 status,url 重定向http status及重定向后的url RedirectTo=302, https://acme.org
12 RemoveRequestHeader 删除请求头 name 待删除的请求头 RemoveRequestHeader=X-Request-Foo
13 RemoveResponseHeader 删除响应头 name 待删除的响应头 RemoveResponseHeader=X-Response-Foo
14 RemoveRequestParameter 删除请求参数 name 待删除的请求参数名 RemoveRequestParameter=red
15 RewritePath 重写PATH regexp,replacement 重写部分匹配规则,需替换的值 RewritePath=/red/?(?<segment>.*), /$\{segment} 匹配规则采用正则表达式,替换值支持从匹配中获取
16 RewriteLocationResponseHeader 重写响应头中的Location stripVersionMode, locationHeaderName, hostValue, protocolsRegex path中version处理模式,location响应头名称,host值,url协议头 RewriteLocationResponseHeader=AS_IN_REQUEST, Location, ,
17 RewriteResponseHeader 重写响应头 name,regexp,replacement 响应头名称,需修改值的匹配规则,需替换的值 RewriteResponseHeader=X-Response-Red, , password=[^&]+, password=***
18 SaveSession 强制触发WebSession::save - - SaveSession
19 SecureHeaders 添加一组安全相关的头信息到响应中 - - SecureHeaders
20 SetPath 设置请求path template path模板 SetPath=/{segment}
21 SetRequestHeader 设置请求头(不添加新的) name,value 请求头及其值 SetRequestHeader=X-Request-Red, Blue
22 SetResponseHeader 设置响应头(不添加新的) name,value 响应头及其值 SetResponseHeader=X-Response-Red, Blue
23 SetStatus 设置响应状态 status 响应状态 SetStatus=401
24 StripPrefix 截断请求PATH parts 需截断的长度(’/'个数) StripPrefix=2
25 Retry 重试过滤器 - - - 详细配置
26 RequestSize 限流器 maxSize 请求最大报文大小 maxSize: 5000000
27 SetRequestHostHeader 设置请求host host 分组及权重 SetRequestHostHeader=example.org
28 ModifyRequestBody 修改请求报文 - - - 只能通过 Java DSL 配置
29 ModifyResponseBody 修改响应报文 - - - 只能通过 Java DSL 配置
30 TokenRelay 配合OAuth2使用 - - TokenRelay=
31 CacheRequestBody 根据权重进行路由 bodyClass 请求体类型 - 详细配置

3.2 全局过滤器(GlobalFilter) 

    全局过滤器作用于所有路由,无需配置。通过全局过滤器可以实现对权限的统一校验,安全性验证等功能。

        abstractgatewayfilterfactory,Sprng Cloud,gateway,spring cloud

 4.自定义过滤器

 4.1 自定义全局过滤器(GlobalFilter)

        a.前置过滤器

@Component
public class MyCustomGlobalFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        System.out.println("this is custom pre filter");
        return chain.filter(exchange).then();
    }

    @Override
    public int getOrder() {
        return 0;
    }
}

b.后置过滤器

@Component
public class MyCustomGlobalFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
            System.out.println("this is post filter");
        }));
    }

    @Override
    public int getOrder() {
        return 0;
    }
}

4.2 自定义局部过滤器

  局部过滤器实现需要继承AbstractGatewayFilterFactory类,并且实现apply方法

import lombok.Data;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;

@Component
public class MyCustomLocalFiterFactory extends AbstractGatewayFilterFactory<MyCustomLocalFiterFactory.ParamsConfig> {
    @Override
    public String name() {
        return "mycustomlocalfiter";
    }

    public MyCustomLocalFiterFactory() {
        super(ParamsConfig.class);
    }

    @Override
    public GatewayFilter apply(ParamsConfig config) {
        return (exchange, chain) -> {
            return chain.filter(exchange).then(Mono.fromRunnable(() -> {
                System.out.println("name=" + config.getParamName() + ";value=" + config.getParamValue());
            }));
        };
    }


    @Data
    public static class ParamsConfig {
        private String paramName;

        private String paramValue;

    }
}

然后还需配置过滤器到路由上

spring:
  cloud:
    gateway:
      routes: #1路由
        - id: producer-one
          uri: lb://producter-one
          predicates: #2通过path断言
            - Path=/*/producterone/**
          filters: #3过滤器,过滤器可以不用配置
            - StripPrefix=1
            - name: mycustomlocalfiter
              args:
                paramname: "this is paramName"
                paramvalue: "this is paramValue"
        - id: producer-two
          uri: http://localhost:8080
          predicates:
            - Path=/*/productertwo/
          filters:
            - StripPrefix=1

 abstractgatewayfilterfactory,Sprng Cloud,gateway,spring cloud

参考:

Gateway过滤器详解_wh柒八九的博客-CSDN博客_gateway 过滤器

 Spring Cloud Gateway配置详解-过滤器_EngineZhang的博客-CSDN博客

gateway自定义过滤器_小菜鸡9527的博客-CSDN博客_gateway自定义过滤器文章来源地址https://www.toymoban.com/news/detail-524993.html

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

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

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

相关文章

  • FFMPEG 视频类过滤器学习整理

    针对FFMPEG提供视频过滤器进行了介绍,并提供使用实例 addroi 作用 在视频帧上标记一块感兴趣的区域。 帧数据被原封不动地传递,但元数据被附加到帧,指示可能影响后续编码行为的感兴趣区域。可以通过多次应用过滤器来标记多个区域。 参数 qoffset: 应用在此区域的量化偏

    2024年02月07日
    浏览(36)
  • 【Qt学习】06:事件与事件过滤器

    一、事件 事件event是由系统或者Qt本身在不同的时刻发出的,主要包括用户事件与定时器事件, 当用户按下鼠标、敲下键盘或者是窗口需要重新绘制的时候,都会发出一个相应的事件,一些事件是在对用户操作做出响应时进行发出(如键盘事件等);另一些事件则是由系统自

    2024年02月11日
    浏览(39)
  • 【C++学习】哈希的应用—位图与布隆过滤器

    文章简介 : 在这篇文章中,你会学习到关于哈希思想的最常见的两个应用,也就是 位图 与 布隆过滤器 , 文章会讲解位图和布隆过滤器的概念,底层实现,对应的适应的场景,以及相关经典 海量数据面试题 及解析。 所谓位图,就是用每一位来存放某种状态,适用于 海量

    2024年04月14日
    浏览(60)
  • Spring MVC学习笔记,包含mvc架构使用,过滤器、拦截器、执行流程等等

    😀😀😀创作不易,各位看官点赞收藏. Spring MVC:Spring MVC是Spring Framework的一部分,是基于java实现的MVC的轻量级Web框架。 官网文档地址:https://docs.spring.io/spring-framework/docs/4.2.4.RELEASE/spring-framework-reference/html/mvc.html 轻量级,简单易学。 高效,基于请求和响应的MVC框架。 与Spri

    2024年02月15日
    浏览(48)
  • JavaWEB学习笔记(二)------HTTP、Servlet、会话、过滤器、监听器、Ajax、前端工程化

    目录 HTTP HTTP1.1 请求和响应的报文格式 请求报文 响应报文 常见状态响应码 Servlet  静态资源和动态资源 ​编辑  Servlet简介  Servlet开发流程 导入和响应头问题 url-pattern不同写法 url-pattern工作方式 Servlet注解方式配置 Servlet生命周期  Servlet继承结构 Servlet接口 GenerisServlet类 Ht

    2024年01月21日
    浏览(43)
  • jQuery选择器(二)(基本过滤器,内容过滤器,可见过滤器)

    写在前面 jQuery是一个快速、简洁的 JavaScript 框架,是继Prototype之后又一个优秀的 JavaScript 代码库。jQuery的设计宗旨是“WriteLess,DoMore”,即倡导写更少的代码,做 更多的事情。jQuery封装了 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,优化HTML文档操作、事件

    2024年02月02日
    浏览(54)
  • Elasticsearch基础篇(五):创建es索引并学习分析器、过滤器、分词器的作用和配置

    Elasticsearch 是一个分布式搜索和分析引擎,它使用JSON文档来存储数据。索引是Elasticsearch中数据的基本组织单元之一,下面是Elasticsearch索引相关的基本概念: 结构元素 Elasticsearch MySQL 数据库 索引(Index) 数据库(Database) 表格 类型(Type)* 表(Table) 记录/行 文档(Document)

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

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

    2024年02月16日
    浏览(47)
  • 异常过滤器—MVC中异常过滤器使用

    异常过滤器( Exception Filters )是 ASP.NET Core 中用于处理全局异常的机制。它们允许你在发生异常时捕获、处理和记录异常,并提供自定义的异常处理逻辑。异常过滤器在整个应用程序范围内生效,可以用于处理各种异常情况。用于实现常见的错误处理策略,没有之前和之后事

    2024年02月13日
    浏览(60)
  • Javaweb | 过滤器、配置、过滤器链、优先级

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 概念 过滤器(Filter)是处于客户端与服务器目标资源之间的一道过滤技术 用户的请求和响应都需要经过过滤器 过滤器作用 执行地位在Servlet之前,客户端发送请求是,会先经过Filter,再到达目标Servlet中;响应时,会根

    2023年04月17日
    浏览(54)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包