Spring Cloud Gateway核心全局过滤器

GlobalFilter接口与GatewayFilter具有相同的签名。这些是特殊的过滤器,有条件地应用于所有路由。,在未来的里程碑版本中,此接口及其使用可能会发生更改。,GlobalFilter拦截式的契约,Web请求的链式处理,可用于实现横切、应用程序无关的需求,如Security、Timeout等。​,当请求匹配路由时,过滤web处理程序将GlobalFilter的所有实例和GatewayFilter的所有特定路由实例添加到过滤器链中。这个组合过滤器链是由org.springframework.core.Ordered接口排序的,你可以通过实现getOrder()方法来设置它。,由于Spring Cloud Gateway区分了过滤器逻辑执行的“前”和“后”阶段(参见它的工作原理),优先级最高的过滤器是“前”阶段的第一个过滤器,是“后”阶段的最后一个过滤器。,下面的代码清单配置了过滤器链:​,ForwardRoutingFilter在交换属性ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR中查找URI。如果URL是前向模式(例如forward:///xxxx),它会使用Spring DispatcherHandler来处理请求。请求URL中的路径部分被前向URL中的路径覆盖。未修改的原始URL被附加到ServerWebExchangeUtils中的列表中ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR属性。,ReactiveLoadBalancerClientFilter在名为ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR的exchange属性中查找URI。如果URL具有lb模式(例如lb://myservice),它会使用Spring Cloud ReactorLoadBalancer将名称(在本例中是myservice)解析为实际的主机和端口,并替换相同属性中的URI。未修改的原始URL被附加到ServerWebExchangeUtils中的列表中GATEWAY_ORIGINAL_REQUEST_URL_ATTR属性。过滤器还在ServerWebExchangeUtils中查找GATEWAY_SCHEME_PREFIX_ATTR属性,查看它是否等于lb。如果等于,则应用相同的规则。下面的代码清单配置了ReactiveLoadBalancerClientFilter:,默认情况下,当ReactorLoadBalancer找不到服务实例时,会返回503。通过设置spring.cloud.gateway.loadbalancer.use404=true,可以配置网关返回404。,从ReactiveLoadBalancerClientFilter返回的ServiceInstance的isSecure值覆盖了向网关发出的请求中指定的方案。例如,如果请求通过HTTPS进入网关,但ServiceInstance表明它不安全,则下游请求将通过HTTP发出。相反的情况也可以适用。但是,如果在网关配置中为路由指定了GATEWAY_SCHEME_PREFIX_ATTR,前缀将被删除,并且从路由URL得到的方案将覆盖ServiceInstance配置。,如果URL位于ServerWebExchangeUtils中,则运行Netty路由过滤器GATEWAY_REQUEST_URL_ATTR交换属性具有http或https方案。它使用Netty HttpClient来发出下游代理请求。响应被放在ServerWebExchangeUtils.CLIENT_RESPONSE_ATTR交换属性,稍后在过滤器中使用。(还有一个实验性的WebClientHttpRoutingFilter,它执行相同的功能,但不需要Netty。),如果服务器ServerWebExchangeUtils中有Netty HttpClientResponse,则运行NettyWriteResponseFilter.CLIENT_RESPONSE_ATTR交换属性。它在所有其他过滤器完成之后运行,并将代理响应写回网关客户端响应。(还有一个实验性的WebClientWriteResponseFilter,它可以执行相同的功能,但不需要Netty。),如果ServerWebExchangeUtils中有路由对象。GATEWAY_ROUTE_ATTR交换属性,运行RouteToRequestUrlFilter。它根据请求的URI创建一个新的URI,但使用路由对象的URI属性进行更新。新的URI放置在ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交换属性’。,如果URI中有一个模式前缀,例如lb:ws://serviceid,则从URI中剥离lb模式,放在ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR,稍后在过滤器链中使用。,如果URL位于ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交换属性有ws或wss方案,websocket路由过滤器运行。它使用Spring WebSocket基础设施向下游转发WebSocket请求。,你可以在URI前加上lb,例如lb:ws://serviceid,对websocket进行负载均衡。​,以上在Gateway中提供的几个核心全局过滤器,任何路由都会被过滤器执行。

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/18841.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年3月5日 上午12:00
下一篇 2023年3月7日 下午10:34