首页 > 其他分享 >GlobalFilter与AbstractGatewayFilterFactory

GlobalFilter与AbstractGatewayFilterFactory

时间:2023-11-20 15:12:40浏览次数:27  
标签:请求 AbstractGatewayFilterFactory 响应 添加 GlobalFilter 过滤器 Red name

GlobalFilter:全局过滤器(接口)

AbstractGatewayFilterFactory:局部过滤器(抽象类)

 

java8中已经写了几个特定过滤器

全局过滤器:

 

局部过滤器:

序号 过滤器 作用 参数名 参数值 示例(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 请求体类型 - 详细配置

 

当然如果可以自定义实现

全局过滤器:implements GlobalFilter(实现)

局部过滤器:extends AbstractGatewayFilterFactory (继承)

GlobalFilter中如果需要区别是前置还是后置,则需要注意chain.filter(exchange).then()的位置,该方法后的方法体为后置,前面的为前置

如果自定义了多个过滤器,需要区分先后执行顺序,则需要重写getOrder方法并赋值,数字越低优先级越高

AbstractGatewayFilterFactory 自定义过滤器需在网关的yaml文件中进行配置,否则不生效

例如:


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

 

标签:请求,AbstractGatewayFilterFactory,响应,添加,GlobalFilter,过滤器,Red,name
From: https://www.cnblogs.com/waxyy/p/17843948.html

相关文章

  • 全局过滤器------GlobalFilter
    前言SpringCloud的网关提供了31中过滤器,但这些过滤器作用都是固定的。如果我们希望拦截请求,做自己的业务逻辑就需要用到全局过滤器。全局过滤器作用全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。区别在于GatewayFilter通过配置定义,处理......
  • SpringCloud GateWay 网关 在GlobalFilter 拿出返回数据response
    前言文章主旨:  将返回数据拿出来,然后各种处理。正文 先看该篇文章的示例接口:红色框框里面就是返回的 response数据。现在我们想要的就是在返回给到调用方(前端、......