统一网关Gateway快速入门

2023-10-26

1.为什么需要网关

为了不让任何人都能访问我们的微服务,对用户的身份进行一个验证,如果是内部人员才允许访问,如果不是就拦截禁止访问。一切请求都得通过网关在进入到微服务中。
在这里插入图片描述

2.搭建网关服务

2.1 创建新的module引入依赖

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

在这里插入图片描述
创建启动类
在这里插入图片描述

2.2 搭建网关服务 编写路由和nacos配置

这些配置是为了让我们的网关能联系上nacos
在这里插入图片描述

  server:
    port: 10010 # 网关入口
  spring:
      application:
        name: gateway # 服务昵称
      cloud:
        nacos:
          server-addr: localhost:8848 # nacos地址
        gateway:
        routes:
            - id: user-service # 路由标识 唯一
              uri: lb://userservice # 路由的目标地址
              predicates: # 路由断言,判断请求是否符号规则
                - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果符号就进入目标地址
          	 - id: order-service
              uri: lb://orderservice
              predicates:
                - Path=/order/**

运行效果,访问我们的网关就能直接访问到微服务了。
在这里插入图片描述
请求进入网关,网关通过我们定义的路由规则带到注册中心里找到相应的地址,然后去做负载均衡
在这里插入图片描述

2.3 路由断言工厂

在这里插入图片描述
在配置文件中添加路由断言来判断时间是否符合,路由规则是不断往下判断的,只要不符合请求都不会给访问。

  gateway:
      routes:
        - id: user-service # 路由标示,必须唯一
          uri: lb://userservice # 路由的目标地址
          predicates: # 路由断言,判断请求是否符合规则
            - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
            - After=2031-04-13T15:14:47.433+08:00[Asia/Shanghai]

 

在这里插入图片描述

2.4 路由过滤器

在这里插入图片描述
我们的请求一定要经过这些过滤器链才能到达服务,
在这里插入图片描述
在指定id方法下面添加过滤器
在这里插入图片描述
全局配置办法
在这里插入图片描述

2.5 全局过滤器

用来拦截一切进入网关的请求还有响应。
在这里插入图片描述
新建一个类来实现我们全局过滤器


// @Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter, Ordered {
    @Override
 public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 1.获取请求参数
        ServerHttpRequest request = exchange.getRequest();
        MultiValueMap<String, String> params = request.getQueryParams();
   // 2.获取参数中的 authorization 参数
        String auth = params.getFirst("authorization");
        // 3.判断参数值是否等于 admin
        if ("admin".equals(auth)) {
     // 4.是,放行
            return chain.filter(exchange);
        }
        // 5.否,拦截
  // 5.1.设置状态码
        exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
        // 5.2.拦截请求
        return exchange.getResponse().setComplete();
    }

}
// 也可以通过接口实现顺序
    @Override
    public int getOrder() {
        return -1;
    }
}

看看效果,访问其他地址不行。
在这里插入图片描述
正确配置就放行
在这里插入图片描述
就可以实现简单的登录逻辑了

在这里插入图片描述

2.6 过滤器的执行顺序

在这里插入图片描述
在这里插入图片描述

2.7 跨域问题

只要域名不一样或者端口不一样互相访问就叫跨域。浏览器禁止ajax跨域请求。
在这里插入图片描述
解决跨域问题
在这里插入图片描述

spring:
  cloud:
    gateway:
      # 。。。
      globalcors: # 全局的跨域处理
        add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
        corsConfigurations:
          '[/**]':
            allowedOrigins: # 允许哪些网站的跨域请求 
              - "http://localhost:8090"
            allowedMethods: # 允许的跨域ajax的请求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
              - "OPTIONS"
            allowedHeaders: "*" # 允许在请求中携带的头信息
            allowCredentials: true # 是否允许携带cookie
            maxAge: 360000 # 这次跨域检测的有效期
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

统一网关Gateway快速入门 的相关文章

  • 在java中轮询Http服务器(重复发送http get请求)

    当对其进行 REST 调用时 我的 Web 服务器会发送一些信息 我想不断轮询该服务器 间隔5秒后重复发送HTTP GET请求 以检查返回的信息是否有任何变化 做到这一点最有效的方法是什么 您能提供一些代码示例吗 请注意 我只想开发客户端代
  • 使用 Java 的 Apache Http 摘要身份验证

    我目前正在开发一个 Java 项目 但无法使 http 摘要身份验证正常工作 我尝试使用 Apache 网站 但没有帮助 我有一个需要 HTTP 摘要身份验证的网站 DefaultHttpClient httpclient new Defa
  • 带路径压缩算法的加权 Quick-Union

    有一种 带路径压缩的加权快速联合 算法 代码 public class WeightedQU private int id private int iz public WeightedQU int N id new int N iz new
  • 使用 Tabula 通过 Python 读取 pdf 时出现 Java 错误

    我已经安装了 tabula 库 用于使用 python 将 pdf 读取到 pandas 数据框中 但是当我运行代码时 import tabula df tabula read pdf sample1 pdf pages 1 我得到了例外
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • 垃圾收集器如何在幕后工作来收集死对象?

    我正在阅读有关垃圾收集的内容 众所周知 垃圾收集会收集死亡对象并回收内存 我的问题是 Collector 如何知道任何对象已死亡 它使用什么数据结构来跟踪活动对象 我正在研究这个问题 我发现GC实际上会跟踪活动对象 并标记它们 每个未标记的
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • 在 Java 中获取并存储子进程的输出

    我正在做一些需要我开始子处理 命令提示符 并在其上执行一些命令的事情 我需要从子进程获取输出并将其存储在文件或字符串中 这是我到目前为止所做的 但它不起作用 public static void main String args try R
  • hibernate 6.0.2.Final 和 spring boot 2.7.0 的entityManagerFactory bean 未配置问题

    所以最近我想升级我的 Spring Boot 项目项目的一些依赖项 特别是这些组件 雅加达 EE 9 弹簧靴2 7 休眠 6 0 2 Final 完成此操作后 所有更新和代码折射 更新将 javax 导入到 jakarta 以及一些 hib
  • 将 JavaFX FXML 对象分组在一起

    非常具有描述性和信息性的答案将从我这里获得价值 50 声望的赏金 我正在 JavaFX 中开发一个应用程序 对于视图 我使用 FXML
  • Log4j2 ThreadContext 映射不适用于parallelStream()

    我有以下示例代码 public class Test static System setProperty isThreadContextMapInheritable true private static final Logger LOGG
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 【头歌】Hadoop开发环境搭建

    本来不想写这个了 就为了搞这实验截图 又得敲一遍这个代码 代码量真的大 我真的是吐了呀 MD 大家反正写过 直接粘贴是最佳选择 没必要自己再做一遍 第1关 配置开发环境 JavaJDK的配置 任务描述 本关任务 配置 JavaJDK 相关知
  • Cadence Allegro 17.4学习记录开始00

    目录 Cadence Allegro 17 4学习记录绪论 第一 先来说说Cadence Allegro 17 4的原因 第二 简单介绍这个EDA软件Cadence Allegro 17 4 第三 学习规划 1 Cadence Allegr
  • java ssh项目 定时任务时,jdbc线程池耗尽问题

    场景 在ssh项目中 用spring自带的schedule创建了个定时任务 服务启动时自动调用任务 在任务执行一段时间后 报了 xxx active 150 maxActive 150错误 原因 spring自带的schedule创建的定时
  • 前端面试题精心整理(一)-TypeScript

    文章目录 TypeScript相关问题及知识点 Q1 ts中type和interface的区别 A1 有相同点与不同点 具体内容如下 Q2 ts中interface和class的区别 分别什么时候使用 A2 interface和class都
  • 运放专题:电压电流转换

    电压电流转换 电压 电流转换即V I转换 是将输入的电压信号转换成满足一定关系的电流信号 转换后的电流相当一个输出可调的恒流源 其输出电流应能够保持稳定而不会随负载的变化而变化 一般来说 电压电流转换电路是通过负反馈的形式来实现的 可以是电
  • python程序设计基础实验题_Python程序设计实验报告:实验五 综合运用三种基本结构进行程序设计...

    实验五 综合运用三种基本结构进行程序设计 综合性实验 班级 物流191 姓名 韩晶晶 学号 3190505140 指导老师 修宇 成绩 日期 2020 4 25 实验目的 1 进一步掌握选择与循环结构程序设计的方法和技巧 2 综合运用三种基
  • Docker Search 异常:Error response from daemon: Get https://index.docker.io/v1/search?xxx

    docker search tomcat Error response from daemon Get https index docker io v1 search q tomcat n 25 dial tcp lookup index
  • KGDB调试内核

    1 环境 Ubuntu 20 04 VMware Worksation 16 Player Linux Kernel 5 4 0 2 设置虚拟机 2 1 准备两台虚拟机 准备一台虚拟机 然后克隆一台虚拟机 下面以左边为客户端和右边为目标机展
  • phpstorm 自动折叠注释

    用了swagger后 注释得写好大一堆 超过一百行的注释都很常见 看起来心好累 phpstorm 能不能自动折叠那些注释呢 网上搜索不到办法 自己尝试去设置了找了下 原来还真有这个功能 设置方法如下 在设置搜索 fold 勾上 Docume
  • Self-study Python Fish-C Note-4 P20-P26 (part1)

    python 中的列表 Part 1 本文主要讲解了python中列表的使用 本文为自学B站上鱼C的python课程随手做的笔记 如有问题 欢迎大家批评指正 原视频链接 https www bilibili com video BV1c44
  • 排序方法与初始排列次序的关系

    元素的移动次数与关键字的初始排列次序无关的是 基数排序 元素的比较次数与初始序列无关是 选择排序 折半插入排序 算法的时间复杂度与初始序列无关的是 选择排序 堆排序 归并排序 基数排序 算法的排序趟数与初始序列无关的是 插入排序 选择排序
  • TongWeb上应用部署方式

    TongWeb上可部署的web应用结构可分为两种 1 打成war包形式的文件 2 以文件夹目录方式的web应用 这两种方式必须要有WEB INF目录才是一个合法web应用结构 方可部署 特殊情况 某些应用是在apache nginx上跑的静
  • linux中管道的概念,浅谈Linux管道

    管道 pipe 是一个我们在学习Linux命令行的时候就会引入的一个很重要的概念 管道是UNIX环境中历史最悠久的进程间通信方式 从本质上说 管道也是一种文件 也是遵循UNIX的 一切皆文件 的原则设计的 虽然实现形态上是文件 但是管道本身
  • vue3的自定义指令API

    vue3中指令api和组件保持一致 具体表现在 bind beforeMount inserted mounted beforeUpdate new 元素自身更新前调用 和组件生命周期钩子很像 update removed 和updated
  • 【vue】vue-element-admin安装npm install报错

    1 从gitee上拉取vue element admin工程文件 2 删除 package json文件里面的tui editor依赖 强调是删除不是注释掉 3 管理员权限运行cmd 目录进入到 vue element admin目录 4
  • 网络基础——OSI模型

    目录 一 OSI七层模型的提出 二 OSI七层模型介绍 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 三 TCP IP协议 部分重要协议使用对应端口 四 数据封装过程 五 不同层级与设备的对应关系 一 OSI七层模型的提出 O
  • Labelme库的json2dataset函数改写

    可用于方便的将json格式的标注文件转换为png jpg等image文件 如果是conda环境的话 pip install labelme之后 文件位置是 envs ENV NAME lib python3 6 site packages
  • 史上最详细中文版Visual Studio2012安装步骤图解新手教程

    下面是IT认证考试资源网总结的Visual Studio 2012的安装方法 1 注意 只有Visual Studio 2012才能进行 Windows 8 应用商店 也就是Windows 8 风格应用程序 程序的开发 Visual Stu
  • 星星之火-57:前传接口 CPRI的速率、能力、小区带宽之间的映射关系

    CPRI的速率 能力 小区带宽之间的映射关系 Rate1 Rate2 Rate3 Rate4 Rate5 Rate6 Rate7 带宽数量 Rate8 Rate9 Rate10 说明 614 4 1228 8 2457 6 3072 491
  • 统一网关Gateway快速入门

    1 为什么需要网关 为了不让任何人都能访问我们的微服务 对用户的身份进行一个验证 如果是内部人员才允许访问 如果不是就拦截禁止访问 一切请求都得通过网关在进入到微服务中 2 搭建网关服务 2 1 创建新的module引入依赖