一、概述
GlobalFilter接口具有与GatewayFilter相同的签名。这些是有条件地应用于所有路由的特殊过滤器。
二、组合式全局过滤器和网关过滤器排序
当请求与路由匹配时,过滤web处理程序会将GlobalFilter的所有实例和GatewayFilter的所有路由特定实例添加到过滤器链中。这个组合过滤器链由org.springframework.core.Ordered接口排序,您可以通过实现getOrder()方法来设置该接口,值越小,越先执行。
由于Spring Cloud Gateway区分了过滤器逻辑执行的“pre” 和 “post” 阶段(请参阅其工作原理),优先级最高的过滤器是“pre”阶段的第一个,“post”的最后一个。
以下列表配置过滤器链:
示例63. ExampleConfiguration.java
@Bean
public GlobalFilter customFilter() {
return new CustomGlobalFilter();
}
public class CustomGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("custom global filter");
return chain.filter(exchange);
}
@Override
public int getOrder() {
return -1;
} #值越小,越先执行
}
三、 Gateway Metrics Filter
要启用网关指标,请添加spring-bootstarter执行器作为项目依赖项。然后,默认情况下,只要spring.cloud.gateway.metrics.enabled属性未设置为false,网关度量过滤器就会运行。此筛选器添加了一个名为spring.cloud.gateway.requests的计时器度量,并带有以下标记:
routeId:路由 ID。
routeUri:API 路由到的 URI。
outcome:结果,按 HttpStatus.Series 分类。
status:返回给客户端的请求的 HTTP 状态。
httpStatusCode:返回到客户端的请求的 HTTP 状态。
httpMethod:用于请求的 HTTP 方法。
此外,通过spring.cloud.gateway.metrics.tags.path.enabled属性(默认为false),您可以使用路径标记激活额外的指标:
path:请求的路径。
这些指标可以从/actuator/metrics/spring.cloud.gateway.requests中获取,并可以与Prometheus轻松集成以创建Grafana仪表板。
四、本地响应缓存过滤器
如果LocalResponseCache的关联属性已启用(spring.cloud.gateway.filter.localresponse-cache.enabled),则LocalResponceCache将运行,并使用咖啡因为满足以下条件的所有响应激活本地缓存:
请求是一个脱胎换骨的GET。
响应具有以下状态代码之一:HTTP 200(正常)、HTTP 206(部分内容)或HTTP 301(永久移动)。
HTTP Cache-Control标头允许缓存(这意味着它没有以下任何值:请求中没有存储,响应中没有存储或私有)。
它接受两个配置参数:
spring.cloud.gateway.filter.local-response-cache.size:设置缓存的最大大小以清除此路由的条目(以KB、MB和GB为单位)。
spring.cloud.gateway.filter.local-response-cache.timeToLive:设置缓存项的过期时间(以秒表示,以分钟表示,以小时表示)。
如果未配置这些参数,但启用了全局筛选器,则默认情况下,它会为缓存的响应配置5分钟的生存时间。
此筛选器还实现了HTTP Cache-Control中max-age 值的自动计算。如果原始响应中存在max-age,则使用timeToLive配置参数中设置的秒数重写该值。在随后的调用中,该值将根据响应到期前剩余的秒数重新计算。
五、转发路由过滤器
ForwardRoutingFilter在交换属性ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR中查找URI。如果URL具有转发方案(例如forward:///localendpoint),它使用SpringDispatcherHandler来处理请求。请求URL的路径部分被转发URL中的路径覆盖。未修改的原始URL将附加到ServerWebExchangeUtils.GATEWAY_original_REQUEST_URL_ATTR属性的列表中。
六、 网络路由过滤器
如果位于ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交换属性中的URL具有http或https方案,则运行Netty路由筛选器。它使用Netty HttpClient发出下游代理请求。响应被放入ServerWebExchangeUtils.CLIENT_response_ATTR交换属性中,以便在稍后的筛选器中使用。(还有一个实验性的WebClientHttpRoutingFilter,它执行相同的功能,但不需要Netty。)
七、网络写入响应过滤器
如果ServerWebExchangeUtils.CLIENT_RESPONSE_ATTR交换属性中存在Netty HttpClientResponse,则运行NettyWriteResponseFilter。它在所有其他筛选器完成后运行,并将代理响应写回网关客户端响应。(还有一个实验性WebClientWriteResponseFilter,它执行相同的功能,但不需要Netty。)
八、反应式负载均衡器客户端过滤器
ReactiveLoadBalancerClientFilter在名为ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR的交换属性中查找URI。如果URL具有lb方案(例如lb://myservice),则使用Spring Cloud ReactorLoadBalancer将名称(在本例中为myservice)解析为实际主机和端口,并替换同一属性中的URI。未修改的原始URL将附加到ServerWebExchangeUtils.GATEWAY_original_REQUEST_URL_ATTR属性的列表中。过滤器还查看ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR属性,以查看其是否等于lb。如果是,则应用相同的规则。以下列表配置ReactiveLoadBalancerClientFilter:
spring:
cloud:
gateway:
routes:
- id: myRoute
uri: lb://service
predicates:
- Path=/service/**
九、路由到请求网址过滤器
如果ServerWebExchangeUtils.GATEWAY_Route_ATTR交换属性中有Route对象,则RouteToRequestUrlFilter将运行。它基于请求URI创建一个新的URI,但使用Route对象的URI属性进行更新。新URI放置在ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交换属性中。
如果URI具有方案前缀,例如lb:ws://serviceid,则会从URI中剥离lb方案,并将其放置在ServerWebExchangeUtils.GATEWAY_scheme_prefix_ATTR中,以便稍后在筛选器链中使用。
十、Websocket 路由过滤器
如果位于ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交换属性中的URL具有ws或wss方案,则会运行websocket路由筛选器。它使用Spring WebSocket基础设施将WebSocket请求转发到下游。
您可以通过在URI前面加上lb(例如lb:ws://serviceid)来负载平衡websockets。
以下清单配置 websocket 路由筛选器:
spring:
cloud:
gateway:
routes:
# SockJS route
- id: websocket_sockjs_route
uri: http://localhost:3001
predicates:
- Path=/websocket/info/**
# Normal Websocket route
- id: websocket_route
uri: ws://localhost:3001
predicates:
- Path=/websocket/**
官网:spring-cloud-gateway文章来源:https://www.toymoban.com/news/detail-703656.html
欢迎来到Doker,欢迎点赞和评论!或者加微信进入技术群聊!文章来源地址https://www.toymoban.com/news/detail-703656.html
到了这里,关于Spring Cloud Gateway GlobalFilter(全局过滤器)详解(官方原版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!