在spring cloud gateway中,过滤器一般分为两种,一种是单个路由的过滤器GatewayFilter(应用到单个路由或者一个分组的路由上),一种是全局的过滤器GlobalFilter(应用到所有的路由上)。这篇文章我们介绍下spring cloud gateway中内置的的一些常用的过滤器。
序号 | 过滤器工厂 | 作用 | 参数 |
1 | AddRequestHeaderGatewayFilterFactory | 为原始请求添加Header | Header的名称及值 |
2 | AddRequestParameterGatewayFilterFactory | 为原始请求添加请求参数 | 参数名称及值 |
3 | AddResponseHeaderGatewayFilterFactory | 为原始响应添加Header | Header的名称及值 |
4 | DedupeResponseHeaderGatewayFilterFactory | 剔除响应头中重复的值 | 需要去重的Header名称及去重策略 |
5 | HystrixGatewayFilterFactory | 为路由引入Hystrix的断路器保护 | HystrixCommand 的名称 |
6 | FallbackHeadersGatewayFilterFactory | 为fallbackUri的请求头中添加具体的异常信息 | Header的名称 |
7 | PrefixPathGatewayFilterFactory | 为原始请求路径添加前缀 | 前缀路径 |
8 | PreserveHostHeaderGatewayFilterFactory | 为请求添加一个preserveHostHeader=true的属性,路由过滤器会检查该属性以决定是否要发送原始的Host | 无 |
9 | RequestRateLimiterGatewayFilterFactory | 用于对请求限流,限流算法为令牌桶 | keyResolver、 rateLimiter、 statusCode、 denyEmptyKey、 emptyKeyStatus |
10 | RedirectToGatewayFilterFactory | 将原始请求重定向到指定的URL | http状态码及重定向的url |
11 | RemoveHopByHopHeadersFilterGatewayFilterFactory | 为原始请求删除IETF组织规定的一系列Header | 默认就会启用,可以通过配置指定仅删除哪些Header |
12 | RemoveRequestHeaderGatewayFilterFactory | 为原始请求删除某个Header | Header名称 |
13 | RemoveResponseHeaderGatewayFilterFactory | 为原始响应删除某个Header | Header名称 |
14 | RewritePathGatewayFilterFactory | 重写原始的请求路径 | 原始路径正则表达式以及重写后路径的正则表达式 |
15 | RewriteResponseHeaderGatewayFilterFactory | 重写原始响应中的某个Header | Header名称,值的正则表达式,重写后的值 |
16 | SaveSessionGatewayFilterFactory | 在转发请求之前,强制执行WebSession::save 操作 | 无 |
17 | secureHeadersGatewayFilterFactory | 为原始响应添加一系列起安全作用的响应头 | 无,支持修改这些安全响应头的值 |
18 | SetPathGatewayFilterFactory | 修改原始的请求路径 | 修改后的路径 |
19 | SetResponseHeaderGatewayFilterFactory | 修改原始响应中某个Header的值 | Header名称,修改后的值 |
20 | SetStatusGatewayFilterFactory | 修改原始响应的状态码 | HTTP 状态码,可以是数字,也可以是字符串 |
21 | StripPrefixGatewayFilterFactory | 用于截断原始请求的路径 | 使用数字表示要截断的路径的数量 |
22 | RetryGatewayFilterFactory | 针对不同的响应进行重试 | retries、statuses、 methods、series |
23 | RequestSizeGatewayFilterFactory | 设置允许接收最大请求包的大小。如果请求包大小超过设置的值,则返回 413 Payload Too Large | 请求包大小,单位为字 节,默认值为5M |
24 | ModifyRequestBodyGatewayFilterFactory | 在转发请求之前修改原始请求体内容 | 修改后的请求体内容 |
25 | ModifyResponseBodyGatewayFilterFactory | 修改原始响应体的内容 | 修改后的响应体内容 |
以上介绍的是常用的一些spring cloud gateway自带的内置过滤器,根据实际业务场景进行使用即可。
可能有一些小伙伴有一些疑问,如何使用这些过滤器呢?其实我们只需要编写一个filter,继承这些类即可。
例如:
package org.shop.gateway.filter; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.factory.AddRequestHeaderGatewayFilterFactory; import org.springframework.http.server.reactive.ServerHttpRequest; public class Filter1 extends AddRequestHeaderGatewayFilterFactory{ @Override public GatewayFilter apply(NameValueConfig config) { return (exchange, chain) -> { ServerHttpRequest request = exchange.getRequest().mutate() .header(config.getName(), config.getValue()) .build(); return chain.filter(exchange.mutate().request(request).build()); }; } }
然后我们再使用的时候配置下:
filters: - AddRequestHeader=${KEY}, ${value} - AddRequestHeader=${KEY}, ${value}
还没有评论,来说两句吧...