SpringCloud全系列知识(4)——统一网关Gateway

news2024/12/25 14:03:55

统一网关Gateway

一 认识网关

1.网关的功能

1.身份认证和权限校验

2.服务路由,负载均衡

3.请求限流
在这里插入图片描述

2.技术实现

  • Gateway
  • zuul
    在这里插入图片描述

二 Gateway的使用

1.搭建网关服务

1.创建新的Module,引入 Gateway 和 Nacos 服务发现依赖。

<!--nacos服务发现依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--gateway依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

2.配置Gateway

spring:
  application:
    name: alibaba-gateway
  cloud:
    nacos:
      server-addr: http://localhost:8848
      discovery:
        username: nacos
        password: nacos
    gateway:
      # 网关路由配置
      routes:
        - id: alibaba-order # 路由id,自定义,唯一即可
          #uri: http://127.0.0.1 # 路由的目标地址,http表示固定地址
          uri: lb://alibaba-order # 路由的微服务名称,lb是负载均衡(loadBalance)
          # 路由断言,判断是否符合路由规则条件
          predicates:
            #路径断言
            - Path=/order/** # 按路径匹配,只要你以/order开头就符合要求

2.断言工厂

断言工厂( Router Predicate Factory)主要用于读取定义的断言规则,并解析为为判断条件。

配置文件中的断言规则仅仅是字符串,这些字符串会被断言工厂解析,转变为真正的的路由判断条件。

Spring Cloud Gateway官方参考文档

Spring Cloud Gateway官方示例
在这里插入图片描述

不符合断言条件时,会返回404

3.路由过滤器

GatewayFilter是网关中的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理
在这里插入图片描述

Gateway Filter提供了31种过滤器,具体可参考官方文档

Spring Cloud Gateway过滤器工厂官方文档:Spring Cloud Gatewa过滤器工厂官方文档

gateway:
  # 网关路由配置
  routes:
    - id: alibaba-user
      uri: lb://alibaba-user
      predicates:
        - Path=/user/**
      filters:
        # 为微服务 alibaba-user 添加请求头 author,值为shawn
        - AddRequestHeader=author, shawn

使用 default-filters 属性添加全局过滤器,全局过滤器对整个网关下的所有路由配置生效

gateway:
  # 网关路由配置
  routes:
    - id: alibaba-user
      uri: lb://alibaba-user
      predicates:
        - Path=/user/**
  # 使用 default-filters 属性配置全局过滤器
  default-filters:
    - AddRequestHeader=author, shawn

4.GlobalFilter

全局过滤器 GlobalFilter 的作用是处理进入一切网关的请求和响应的数据,和 GatewayFilter 的作用一样。

GlobalFilter 需要通过自己实现代码,而 GatewayFilter 仅仅是通过配置实现固定业务的处理。

通过实现 GlobalFilter 接口来定义全局过滤器。
在这里插入图片描述

自定义实现类实现GlobalFilter并且处理简单的业务逻辑

@Component
//定义过滤器执行顺序,也可以通过实现 Orderd 接口来定义执行顺序
@Order(-1)
public class CustomGlobalFilter implements GlobalFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //1.获取请求参数
        ServerHttpRequest request = exchange.getRequest();
        MultiValueMap<String, String> queryParams = request.getQueryParams();
        String author = queryParams.getFirst("author");

        //2.处理业务逻辑
        if("shawn".equals(author)){
            //放行
            return chain.filter(exchange);
        }
        //3.拦截
        ServerHttpResponse response = exchange.getResponse();
        //3.1设置状态码
        response.setStatusCode(HttpStatus.UNAUTHORIZED);
        return response.setComplete();
    }
}

此时访问地址中必须有author参数且参数值必须为shawn才能正常访问,否则抛出401。

5.过滤器执行顺序

在这里插入图片描述

每个过滤器都必须指定一个 Int 类型的执行顺序,值越小,执行顺序越靠前。

可以通过 @Order 注解 或者 实现 Orderd 接口来实现。
在这里插入图片描述

6.网关的跨域问题处理

在这里插入图片描述

跨域配置示例

gateway:
      globalcors:
        add-to-simple-url-handler-mapping: true
        cors-configurations:
          '[/**]':
            # 允许跨域的网站
            allowedOrigins:
              - "http://192.168.16.192:8080"
              - "http://localhost:8080"
            allowedHeaders: "*"
            # 允许跨域的请求方式
            allowedMethods:
              - GET
              - POST
              - POST
              - DELETE
              - OPTIONS
            allowCredentials: true  # 是否允许携带cookie
            maxAge: 36000 # 跨域检测有效期

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

天宇优配|研判明年下半年投资机会或更大 险资看好“安全”与“发展”

上海证券报记者昨日获悉&#xff0c;多家稳妥资管公司已经拟定2023年出资战略&#xff0c;跟着本年以来多项稳经济方针逐步落地&#xff0c;险资遍及看好下一年经济复苏带来的商场出资时机。 权益出资方面&#xff0c;险资以为&#xff0c;当时股票商场估值处于前史较低水平&am…

Java语言有多少优势(总结版)

现在有越来越多的新技术工具、新语言涌现&#xff0c;面对林林总总的语言&#xff0c;总会有人问&#xff1a; 这么多语言应该先学哪一种&#xff1f; 什么语言值得我们长时间地学习&#xff1f; 学完之后职业发展前景大吗&#xff1f; 那么&#xff0c;我给出的答案是Java …

C++手敲Roberts_Prewitt_Sobel实现阈值分割

使用OPENCV,编写代码&#xff0c;学习图像二值化算法&#xff0c;以及边缘检测算法&#xff0c;进行图像的分割。 下面主要介绍Robert算子的实现过程&#xff1a; ①任务分析 调入并显示图像&#xff1b;使用Roberts 算子对图像进行边缘检测处理&#xff1b; Roberts 算子为…

【Scala专栏】字符串与集合

本文索引一、String/StringBuilder二、Array三、List四、Set五、Map六、TupleScala中的字符串在本质上就是Java的字符串String&#xff0c; 所以在用法上除了要符合Scala的语法以外&#xff0c;其他方面是如出一辙的。   Scala中的集合分为可变和不可变&#xff0c;默认声明…

内核编译 --- 链接器

先回顾一下编译知识 将一个程序的编译分为两个大的阶段&#xff1a;编译阶段和链接阶段 编译阶段又分为三个步骤&#xff1a;预编译&#xff0c;编译&#xff08;此编译和上面程序的编译不是同一个意思… 上面那个是指宽泛的编译&#xff09;和汇编 编译阶段经过预编译、编译…

笔记 vue3如何引入iconfont

本次采用的免费字体图标是iconfont 1、点我进入官网 2、具体流程 1、 需要什么图标在上面搜索框查找&#xff0c;然后加入购物车&#xff0c;选完后再点右上角的购物车 2、添加到项目中&#xff0c;有项目就选项目添加&#xff0c;没有就创建项目 3、确定后进入你的项目(可以…

契约测试理论篇

契约测试理论篇 目录契约测试理论篇什么是契约测试契约测试存在一些的问题契约测试的主要实践总结随着 Web 系统的大规模发展&#xff0c;Web API 已经成为了一种广泛使用的技术&#xff0c;再加上微服务和云系统的普及&#xff0c;Web API 的数量呈几何增长。比如在一个大型 W…

pandas 将一行拆分为多行,将多行合并为一行

需求描述 在今天的数据需求&#xff0c;现在要统计各个场景下的类目种类数&#xff0c;并列出对应都有哪些类目。 现在面临的问题是&#xff1a;每个客户的应用场景不同&#xff0c;购买的类目也有多种。 &#x1f39e;&#x1f39e;&#x1f39e;&#x1f39e;&#x1f39e;&…

postgres源码解析38 表创建执行全流程梳理--4

本文讲解非系统表的创建逻辑&#xff08;[<fontcolor0000dd>普通表和索引表]&#xff09;&#xff0c;其入口函数为heap_create&#xff0c;内部公共接口函数为RelationBuildLocalRelation和RelationCreateStorage相关知识回顾见&#xff1a; postgres源码解析38 表创建执…

宝宝入托,爸妈要避开这5种心态

孩子入托&#xff0c;父母也要做好心理准备&#xff0c;尤其需要避免以下5种常见的、不良心理状态&#xff0c;否则会加重孩子入托的困难度。 01.“生离死别式”的入托状态 即每次送孩子入园&#xff0c;就像一场生离死别。宝宝屋里哭&#xff0c;家长屋外哭&#xff0c;最后多…

大数据编程实验四:SparkStreaming编程

大数据编程实验四&#xff1a;SparkStreaming编程 文章目录大数据编程实验四&#xff1a;SparkStreaming编程一、实验目的与要求二、实验内容三、实验步骤1、利用Spark Streaming对不同类型数据源的数据进行处理2、完成DStream的两种有状态转换操作3、完成把DStream的数据输出保…

推荐一个对pytorch代码详细注释的github项目

今天在无意间找一个pytorch代码和注释的Github项目。 先上项目&#xff1a; https://github.com/labmlai/annotated_deep_learning_paper_implementations 这个项目还有个网站&#xff0c;地址&#xff1a;https://nn.labml.ai/ 这个项目将论文和pytorch代码结合起来&#xff…

jsp源码商城系统Myeclipse开发mysql数据库servlet开发java编程计算机网页项目

一、源码特点 JSP 源码商城系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用serlvetdaobean mvc 模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发…

想学习如何把excel图片转表格?1分钟教会你图片转表格怎么转

应该有不少小伙伴接收过上司或领导以图片格式发送过来的excel表格吧&#xff1f;并且还会要求我们将里面的内容整理为电子档&#xff0c;便于后期的内容编辑以及数据修改。 而当你们收到这种任务时&#xff0c;是怎么去操作的呢&#xff1f;是不是大部分人会选择手动重新制作&a…

【数据可视化】第四章—— 基于pandas的数据可视化(pandas数据结构)

文章目录前言1. Pandas库的引用2. Pandas库的数据类型2.1 Series类型2.2 Series创建方式2.3 Series类型的基本操作2.3.1 Series类型的切片和索引2.3.2 Series类型的对齐操作2.3.3 Series类型的name属性2.3.4 Series类型的修改2.4 DataFrame类型2.5 DataFrame类型创建2.6 DataFr…

毕设选题推荐基于python的django框架医院预约挂号系统

精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设老哥&#x1f525; &#x1f496; Java实战项目专栏 Python实…

公网SSH远程连接内网Ubuntu主机【cpolar内网穿透】

SSH为建立在应用层基础上的安全协议&#xff0c;专为远程登录会话和其他网络服务提供安全性的协议。但在没有公网IP的环境下&#xff0c;只能在同个局域网下远程。 本篇教程主要实现通过内网穿透&#xff0c;在公网环境下SSH远程登录内网的Ubuntu主机&#xff0c;突破局域网的…

manjaro gnome 记录 3 配置国内镜像源

manjaro gnome 记录 3 配置国内镜像源初manjaro 记录 3 配置国内镜像源更改这个文件设置源初 希望能写一些简单的教程和案例分享给需要的人 manjaro 记录 3 配置国内镜像源 打开图像界面的软件管理&#xff0c;点击右上角&#xff1a;三个点的图标 点击首选项 输入管理员密…

Day17-购物车页面-收获地址-初步封装my-address组件

1.创建收货地址组件&#xff08;my-address&#xff09; 我的操作&#xff1a; 1>在uni_modules文件夹右键新建一个组件 2>还需要自己补全代码 1>和2>的阶段效果图&#xff1a; my-address组件已经被渲染成功了。 *********************************************…

一文看懂linux 内核网络中 RPS/RFS 原理

1 自带 irqbalance 瓶颈 基于简单的中断负载均衡(如系统自带的irqbalance进程)可能会弄巧成拙。因为其并不识别网络流&#xff0c;只识别到这是一个数据包&#xff0c;不能识别到数据包的元组信息。 在多处理器系统的每个处理器都有单独的硬件高速缓存&#xff0c;如果其中一…