SpringCloud - Gateway网关路由

news/2024/5/3 20:21:21/文章来源:https://blog.csdn.net/weixin_59624686/article/details/129195704

目录

网关初步介绍

搭建网关服务

路由断言工厂Route Predicate Factory

路由过滤器 GatewayFilter

全局过滤器 GlobalFilter

过滤器执行顺序

网关的cors跨域配置


  • 网关初步介绍

  • 不是所有的请求,都能访问服务,所以需要网关对来访问的请求进行提前判断
  • 网关的功能:
    • 身份认证和权限校验
      • 网关作为微服务入口,需要校验用户是否有请求资格,如果没有则进行拦截
    • 服务路由、负载均衡
      • 一切请求都必须先经过网关,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由
      • 当路由的目标服务有多个时,还需要做负载均衡
    • 请求限流
      • 当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大
  • 在SpringCloud中网关的实现包括两种:
  • zuul
    • Zuul是基于Servlet的实现,属于阻塞式编程
  • gateway
    • 而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能
  • 搭建网关服务

  • 1.创建新的module引入SpringCloudGateway的依赖和nacos的服务发现依赖

  • 2.编写路由配置及nacos地址

  • 路由配置包括:
    • 1.路由id:路由的唯一标示
    • 2.路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡
    • 3.路由断言(predicates):判断路由的规则
    • 4.路由过滤器(filters):对请求或响应做处理
  • 网关访问流程:

  • 3.启动网关服务进行测试

  • 路由断言工厂Route Predicate Factory

  • 网关路由可以配置的内容包括:
    • 路由id:路由唯一标示
    • uri:路由目的地,支持lb和http两种
    • predicates:路由断言,判断请求是否符合要求,符合则转发到路由目的地
    • filters:路由过滤器,处理请求或响应
  • 在配置文件中写的断言规则只是字符串,这些字符串会被断言工厂(Predicate Factory)读取并处理,转变为路由判断的条件
  • 例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理
  • 像这样的断言工厂在SpringCloudGateway还有十几个
  • Spring提供了11种基本的Predicate工厂:

  • 路由过滤器 GatewayFilter

  • GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:

  • Spring提供了31种不同的路由过滤器工厂;例如:

  • 案例:给所有进入userservice的请求添加一个请求头
  • 请求头为:Truth,Apache
  • 实现方式:
    • 在gateway中修改application.yml文件,给userservice的路由添加过滤器:
    • 局部:

    • 全局:

    • 访问代码:

  • 测试成功

  • 全局过滤器 GlobalFilter

  • 全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样
  • 区别在于GatewayFilter通过配置定义,处理逻辑是固定的
  • 而GlobalFilter的逻辑需要自己写代码实现;定义方式是实现GlobalFilter接口

  • 案例:定义全局过滤器,拦截并判断用户身份
  • 需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:
    • 参数中是否有authorization,
    • authorization参数值是否为admin
  • 如果同时满足则放行,否则拦截
  • 自定义类,实现GlobalFilter接口,添加@Order注解:

  • 测试成功

  • 过滤器执行顺序

  • 请求进入网关会碰到三类过滤器:
    • 当前路由的过滤器
    • DefaultFilter
    • GlobalFilter
  • 请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器:

  • 路由过滤器和DefaultFilter底层都由AddRequestHeaderGatewayFilterFactory实现,返回GatewayFilter
  • GlobalFilter由GatewayFilterAdapter转为GatewayFilter
  • 排序的规则
    • 每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执行顺序越靠前
    • GlobalFilter通过实现Ordered接口,或者添加@Order注解来指定order值,自己指定
    • 路由过滤器和defaultFilter的order由Spring指定,默认是按照声明顺序从1递增
    • 当过滤器的order值一样时,会按照 defaultFilter > 路由过滤器 > GlobalFilter的顺序执行
  • 网关的cors跨域配置

  • 跨域:域名不一致就是跨域,主要包括:
    • 域名不同: www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com
    • 域名相同,端口不同:localhost:8080和localhost8081
  • 跨域问题:浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被浏览器拦截的问题
  • 解决方案:CORS
  • 网关处理跨域采用的同样是CORS方案,并且只需要简单配置即可实现:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_262320.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 9 的新特性解读(1)

前言  经过4次跳票,历经曲折的Java 9 终于终于在2017年9月21日发布。  从Java 9 这个版本开始,Java 的计划发布周期是 6 个月,下一个 Java 的主版本将于 2018 年 3 月发布,命名为 Java 18.3,紧接着再过六个月将发布…

CSS 盒子模型【快速掌握知识点】

目录 一、什么是盒子模型 二、边框border-color 三、边框粗细border-width 四、边框样式border-style 五、外边距margin 六、内边距padding 七、圆角边框 八、圆形 九、盒子阴影 一、什么是盒子模型 css盒子模型又称为框模型,盒子的最内部是元素的实际内容…

【Git】与“三年经验”就差个分支操作的距离

前言 Java之父于胜军说过,曾经一位“三年开发经验”的程序员粉丝朋友,刚入职因为不会解决分支问题而被开除,这是不是在警示我们什么呢? 针对一些Git的不常用操作,我们通过例子来演示一遍 1.版本回退 1.1已提交但未p…

notepad++如何快速批量搜索复制,3步搜索+标记所在行+复制书签行

一。缘起 用习惯了 某edit, 突然用notepad很不习惯,至少3处不习惯:列操作,批量复制搜索行,和是txt文件比较。 另外一直坚持认为,不提供快捷键操作的软件不是好软件:)当下屏幕对眼睛迫害至深的时…

SGI 空间配置器

前言 空间配置器是 STL 六大组件之一,它总是隐藏在容器的背后,默默工作,默默付出。本文为《STL 源码剖析》读书笔记,主要讨论 SGI 版本空间的配置和释放,对代码进行解读时会改变一些写法,使其更易于阅读。…

企业急需:拥有一个属于自身的知识库!

如今,拥有知识库对任何企业来说都是绝对必要的。特别是在软件即服务方面。如果您真的希望您的 SaaS 业务取得成功,您需要从第一天开始构建知识库。为什么?首先,SaaS 公司有一个货币化模型,专注于他们的每月经常性收入 …

多传感器分布式融合算法——多传感器网络协同目标跟踪和定位

多传感器分布式融合算法 应用: 多传感器网络协同目标跟踪及定位 原创不易,路过的各位大佬请点个赞 主要讲解算法: 多传感器集中式融合算法/分布式融合算法/序贯融合算法 多速率多传感器异步融合算法 多传感器…

PHP程序员适合创业吗?

创业是一件自然而然的事,不需要人为选择。 只要你是一个努力能干主动的人,当你在一个行业深耕5年之后,就会发现人生发展的下一步就是创业。当然如果行业合适的话。 什么叫行业合适呢? 就是创业的成本并不那么高,不需…

js 实现 Logo(图片)根据图片后面的图片颜色而变化成相反的颜色【解决logo固定后 会出现与不同板块的颜色相同导致于看不清logo的情况】

效果展示&#xff1a; <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <meta http-equiv"X-UA-Compatible" content"ieedge"><style type"text/css…

Unreal Engine 虚幻引擎,性能分析,优化(二)

一、CPU 性能分析 如渲染线程中出现 CPU 受限&#xff0c;原因可能是绘制调用过多。这是一个常见问题&#xff0c;美术师通常会将绘制调用进行组合&#xff0c;从而减少消耗&#xff08;如&#xff1a;将多个墙壁组合为一个网格体&#xff09;。实际消耗存在于多个区域中&…

vue3路由守卫

文章目录路由守卫1.全局路由守卫2.组件内守卫3.路由独享守卫提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考路由守卫 全局守卫&#xff08;3个&#xff09; 路由独享守卫&#xff08;1个&#xff09; 组件的守卫&#xff08;3个&#xff09; 路由守卫的…

蓝牙运动耳机哪个好,比较好的运动蓝牙耳机

很多想选择蓝牙运动耳机的朋友都不知道应该如何选择&#xff0c;运动首先需要注意的就是耳机的防水能力以及耳机佩戴舒适度&#xff0c;在运动当中会排出大量的汗水&#xff0c;耳机防水等级做到越高&#xff0c;可以更好地保护耳机不受汗水浸湿&#xff0c;下面就分享五款适合…

《图机器学习》-Graph Neural Network

前言 回顾之前的Node Embedding&#xff1a; 将图中的节点嵌入到d维空间&#xff0c;并确保图中相似的节点能够嵌在一起。 即学习一个编码器ENCENCENC确保图的节点嵌入到embedding space依然能够描述原空间节点之间的相似性。 在Node Embedding中&#xff0c;我们需要设计&…

CSCode 配置一条龙 CPP/CC

下载 官⽹下载地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 下载太慢&#xff0c;推荐⽂章&#xff1a;解决VsCode下载慢问题_wang13679201813的博客-CSDN博客_vscode下载慢 安装 无脑下一步 推荐插件 免配置&#xff1a; 1. Remote - SSH - 远程…

骨传导耳机是怎么传声的,选择骨传导耳机的时候需要注意什么?

​骨传导耳机之所以能够成为当下最火的耳机&#xff0c;骨传导技术将声音转化为震动感&#xff0c;通过骨头进行传播&#xff0c;不会堵塞耳朵&#xff0c;就不会影响到周围环境音。这种技术也让骨传导耳机比传统入耳式耳机更安全&#xff0c;无需入耳式设计&#xff0c;避免了…

Interview系列 - 07 Java | 集合的快速失败和安全失败机制 | 迭代器类源码 | CopyOnWriteArrayList

文章目录1. 集合的快速失败 (fail-fast)1. 使用增强for遍历集合并使用ArrayList的 remove() 方法删除集合元素2. 使用 forEach 遍历集合并使用ArrayList的 remove() 方法删除集合元素3. 使用迭代器遍历集合并使用ArrayList的 remove() 方法删除集合元素4. 使用迭代器遍历集合并…

【离线数仓-6-数据仓库开发ODS层设计要点】

离线数仓-6-数据仓库开发ODS层设计要点离线数仓-6-数据仓库开发ODS层1.数据仓库开发ODS层设计要点2.ODS层用户行为日志表1.hive中复杂结构体复习1.array2.map3.struct 复杂结构4.嵌套格式2.hive中针对复杂结构字符串的练习1.针对ods层为json格式数据的练习2.用户行为日志表的设…

详解数据库基本概念

数据库&#xff08;DataBase 简称 DB&#xff09;&#xff1a;是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合数据库管理系统&#xff08;DataBase Management System 简称 DBMS&#xff09;&#xff1a;是一种操纵和管理数据库的大型软件&#xf…

获取Windows11开发环境及VirtualBox配置指南

今天我们来讲一讲Windows11开发环境的快速搭建&#xff0c;主要是通过Virtualbox虚拟机安装微软官方预先配置好的Windows11环境包&#xff0c;配置简单&#xff0c;开箱即用。 获取虚拟机打包镜像 微软官方提供了多个系统平台的Windows11虚拟机镜打包镜像&#xff0c;只需要导…

python--排序总结

1.快速排序 a.原理 快速排序的基本思想是在待排序的 n 个元素中任取一个元素&#xff08;通常取第一个元素&#xff09;作为基准&#xff0c;把该元素放人最终位置后&#xff0c;整个数据序列被基准分割成两个子序列&#xff0c;所有小于基准的元素放置在前子序列中&#xff0…