热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Gateway全局过滤器

Gateway全局过滤器文章目录Gateway全局过滤器概述组合使用GlobalFilter和GatewayFilterLoadBalancerClientReactiveLoad

Gateway全局过滤器


文章目录

  • Gateway全局过滤器
    • 概述
    • 组合使用GlobalFilter和GatewayFilter
    • LoadBalancerClient
    • ReactiveLoadBalancerClientFilter


概述

全局过滤器GlobalFilte 接口与 GatewayFilter 具有相同的签名,这些特定的过滤器有条件的应用到所有的路由上。


https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.0.RC1/reference/html/#global-filters



组合使用GlobalFilter和GatewayFilter

当请求进来的时候,过滤器Web处理器将会将所有的GlobalFilter 实例和所有特定的GatewayFilter 路由实例添加到过滤器filter链中,该组合的过滤器按org.springframework.core.Ordered接口排序,通过实现getOrder()方法来设置。

由于Spring Cloud Gateway 区分了过滤器逻辑执行器的"前"阶段和"后"阶段,因此优先级最高的过滤器在pre 阶段中处于第一个,而在post 阶段处于最后一个。

CustomGlobalFilter.java

public class CustomGlobalFilter implements GlobalFilter,Ordered {&#64;Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {return chain.filter(exchange);}&#64;Overridepublic int getOrder() {return 0;}
}

注意&#xff1a;数值越小&#xff0c;越靠前执行。


LoadBalancerClient

LoadBalancerClientFilter在交换属性查找一个URI ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR。如果url有一个lb方案&#xff08;即lb://myservice&#xff09;&#xff0c;它将使用Spring Cloud LoadBalancerClient将名称&#xff08;myservice在前面的示例中&#xff09;解析为实际的主机和端口&#xff0c;并在同一属性中替换URI。未经修改的原始url将附加到ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR属性中的列表。过滤器还将在ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR属性中查找是否相等lb&#xff0c;然后应用相同的规则

application.yaml

spring:cloud:gateway:routes:- id: myRouteuri: lb://servicepredicates:- Path&#61;/service/**

上面的介绍难以理解&#xff0c;其实通过代码可以看出&#xff0c;就是使用lb 来指定是否使用ribbon负载均衡。可以发现&#xff0c;这里Gateway也是使用ribbon来实现负载均衡的。

默认情况下&#xff0c;当一个服务示例不能被LoadBalancer发现,将会返回503, 我们可以配置spring.cloud.gateway.loadbalancer.use404 &#61; false 来使得Gateway返回404.

我们建议使用ReactiveLoadBalancerClientFilter。您可以通过设置spring.cloud.loadbalancer.ribbon.enabled的值为false来使用ReactiveLoadBalancerClientFilter.


ReactiveLoadBalancerClientFilter

如上&#xff0c;见识使用这个&#xff0c;只需要将spring.cloud.loadbalancer.ribbon.enabled设置为false就可以了。


推荐阅读
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
author-avatar
大叔丶你好哇塞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有