Gateway 网关 之 Filter
Filter作用
在路由转发到代理服务之前和代理服务返回结果之后额外做的事情。Filter执行了说明断言条件通过了
官网文档:https://cloud.spring.io/spring-cloud-gateway/reference/html/#gatewayfilter-factories
Gateway Filter Factories
1、路由过滤器可用于修改进入进入的 HTTP 请求和 返回的 HTTP 响应,路由过滤器只能指定路由进行使用,SpringCloud内置了很多过滤器,他们有 GatewayFilter 的工厂来生产
2、生命周期:有 pre (类似于前置) 和 post (类似于后置) 两个生命周期,
3、种类: GatewayFilter (单一过滤器 ,官方提供 31个) 和 GlobalFilter (全局过滤器,官方提供 10个),可自行实现
在Spring Cloud Gateway的路由中Filter分为:内置Filter,都是GatewayFilter实现类、自定义GlobalFilter
所有内置Filter都实现GatewayFilter接口。使用时filters属性中过滤器名:XxxGatewayFilterFactory 命名为 Xxx,
如:StripPrefixGatewayFilterFactory 命名为 StripPrefix=1,代表过滤转发地址前缀过滤一节,
GatewayFilter 是一个接口,主要实现类:
举例:
StripPrefix
spring: application: name: @artifactId@ cloud: gateway: discovery: locator: enabled: true routes: - id: my-admin predcates: - Path=/admin/** uri: lb://my-admin filter: - StripPrefix=1
https//gateway-server:port/admin/getXxx, 对应的 断言 /admin 符合断言,
转发地址为:https://gateway-server:port/admion/getXxx,过滤时对转发地址前缀过滤一节 即删除 /person -> https://gateway-server:port/getXxx
因为所有路由都需要这样处理,所以可以使用 全局过滤器中处理:
@Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); // 转发忽略第一层 等价于 StripPrefix=1 String rawPath = request.getURI().getRawPath(); String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, "/")).skip(1L) .collect(Collectors.joining("/")); ServerHttpRequest newRequest = request.mutate().path(newPath).build(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI()); return chain.filter(exchange.mutate().request(newRequest.mutate().build()).build()); }
AddRequestHeader
添加请求头参数,参数和值之间使用逗号分隔
routes:
filters:
- AddRequestHeader=X-Request-red, blue
AddRequestParameter
添加请求表单参数,多个参数需要有多个过滤器
filters: - AddRequestParameter=app-name,braineex - AddRequestParameter=age,123
AddResponseHeader
添加响应头
DedupeResponseHeader
对指定响应头去重复
语法:DedupeResponseHeader=响应头参数 响应头参数,strategy
可选参数strategy可取值:
RETAIN_FIRST 默认值,保留第一个
RETAIN_LAST 保留最后一个
RETAIN_UNIQUE 保留唯一的,出现重复的属性值,会保留一个。例如有两个My:bbb的属性,最后会只留一个
filters:
- DedupeResponseHeader=My Content-Type,RETAIN_UNIQUE
CircuitBreaker
实现熔断时使用,支持CircuitBreaker和Hystrix两种
FallbackHeaders
可以添加降级时的异常信息
PrefixPath
匹配所有前缀满足条件的URI
RequestRateLimiter
限流过滤器。
RedirectTo
重定向。有两个参数,status和url。其中status应该300系列重定向状态码
RemoveRequestHeader
删除请求头参数
RemoveResponseHeader
删除响应头参数
RemoveRequestParameter
删除请求参数
RewritePath
重写请求路径
RewriteResponseHeader
重写响应头参数
SaveSession
如果项目中使用Spring Security和Spring Session整合时,此属性特别重要
SecureHeaders
具有权限验证时,建议的头信息内容
SetPath
功能和StripPrefix有点类似。语法更贴近restful,
当前请求路径为/red/blue时会将/blue发送给下游
predicates: - Path=/red/{segment} filters: - SetPath=/{segment}
SetRequestHeader
替换请求参数头数。不是添加
SetResponseHeader
替换响应头参数
SetStatus
设置响应状态码
StripPrefix
跳过路由uri中前几段后发送给下游
Retry
设置重试次数
RequestSize
请求最大大小。包含maxSize参数,可以有单位“KB”或“MB”默认为“B”,比如设置上传大小限制
ModifyRequestBody
修改请求体内容,不建议使用
ModifyResponseBody
修改响应体,不建议使用
如:过滤器工厂会在匹配上的请求头中加入一个请求头,名称为:X-Request-Id,值为:1024
- AddRequestHeader=X-Request-Id, 1024
>>>>>>>>>>>>> 下一篇 :https://www.cnblogs.com/chxlay/p/15150543.html <<<<<<<<<<<<<<<<<<
本文来自博客园,作者:Vermeer,转载请注明原文链接:https://www.cnblogs.com/chxlay/p/15150532.html