简单明了!网关Gateway路由配置filters实现路径重写及对应正则表达式的解析

问题背景:

前端需要发送一个这样的请求,但出现404

首先解析请求的变化:

 http://www.51xuecheng.cn/api/checkcode/pic

1.请求先打在nginx,www.51xuecheng.cn/api/checkcode/pic部分匹配到了之后会转发给网关进行处理变成localhost:63010/checkcode/pic

 2.然后再转发到网关上,网关上的路由转发配置如下图。然后localhost:63010/checkcode/pic来到网关之后,发现符合/checkcode开头的请求,因此就转发拼接给uri中的去处理(此处为lb://checkcode。因此就变成localhost:63075/pic

 

但我们是需要localhost:63075/checkcode/pic才能把请求发送到对应服务。因此就要进行路由重写

这样的请求是能成功的

官网案例:

- RewritePath=/red(?<segment>/?.*), $\{segment}

spring:cloud:gateway:routes:- id: rewritepath_routeuri: https://example.orgpredicates:- Path=/red/**filters:- RewritePath=/red(?<segment>/?.*), $\{segment}

正则表达式解析:

命名分组:(?<segment>/?.*)

这一部分是将后面匹配的字符串捕获到一个名为segment的组中,如这个案例中就是将/?.*这部分自定义的捕获到segment中

  • ?<segment>

    名称为 segment 的组

  • /?

     字符/出现0次或1次

  • .*

     任意字符出现0次或多次

引用捕获文本:$\{segment}


将前面名为 segment 的组捕获到的字符串移动到此。
注意:此处\的出现是避免 yaml 认为这是一个变量${segment}

 实例:

此处的路由意思就是去掉/checkcode/,并捕获后面的字符串,然后用/xxxx代替去掉的部分,再拼接捕获的部分。

localhost:63075/checkcode/pic -->  localhost:63075/xxxx/pic

- id: checkcodeuri: lb://checkcodepredicates:- Path=/checkcode/**filters:- RewritePath=/checkcode/?(?<segment>.*), /xxxx/$\{segment}

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

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

相关文章

云安全-云原生技术架构(Docker逃逸技术-特权与危险挂载)

0x00 云原生技术-docker docker容器和虚拟机的对比&#xff1a;前者是将运行环境打包&#xff0c;封装一个环境。后者是将整个系统打包&#xff0c;封装一个系统。在操作使用上来说各有利弊。 0x01 docker容器的三种逃逸类型 特权模式启动&#xff08;不安全的启动方式&…

Python selenium获取元素信息

视频版教程&#xff1a;一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium 主要text属性和三个方法get_attribute()&#xff0c;get_property()&#xff0c;get_dom_attribute() text属性获取元素的文本信息&#xff1b; get_attribute()&#xff0c;ge…

Android---StartActivity启动过程

在手机桌面应用中点击某一个 icon 之后&#xff0c;最终是通过 startActivity 去打开某一个 Activity 页面。我们知道&#xff0c;Android 中的一个 APP 就相当于一个进程。所以&#xff0c;startActivity 操作中还需要判断&#xff0c;目标 Activity 的进程是否已经创建。如果…

美食论坛大全订阅交流系统 uniapp+vue 微信小程序设计与实现

美食大全订阅小程序在系统的智能手机上可以运行&#xff0c;主要实现了首页、个人中心、用户管理、菜系管理、口味管理、美食分类管理、美食信息管理、美食论坛、系统管理等主要功能模块的操作和管理。 后端&#xff1a;java(springbootssm)/python/php/nodejs/ 开发运行&…

C++ stack queue 的模拟实现

1.为什么选择 deque 作为 stack 和 queue 的默认容器呢&#xff1f; stack 是一种后进先出的特殊线性数据结构&#xff0c;因此只要具有 push_back() 和 pop_back() 操作的线性结构&#xff0c;都可 以作为 stack 的底层容器&#xff0c;比如 vector 和 list 都可以&#xff1b…

ch3_6多线程举例

作者丨billom 来源丨投稿 编辑丨GiantPandaCV 云端深度学习的服务的性能加速通常需要算法和工程的协同加速&#xff0c;需要模型推理和计算节点的融合&#xff0c;并保证整个“木桶”没有太明显的短板。 如何在满足时延前提下让算法工程师的服务的吞吐尽可能高&#xff0c;尽…

【论文阅读VLDB23】Online Schema Evolution is (Almost) Free for Snapshot Databases

Online Schema Evolution is (Almost) Free for Snapshot Databases 对snapshot DB来说可以几乎在线进行schema的演变。 ABSTRACT 在现有数据库系统中&#xff0c;对在线和事务模式演变的支持仍然具有挑战性。之前处理这种schema 演变基本是patches补丁的方式来做&#xff0…

【卷积神经网络】YOLO 算法原理

在计算机视觉领域中&#xff0c;目标检测&#xff08;Object Detection&#xff09;是一个具有挑战性且重要的新兴研究方向。目标检测不仅要预测图片中是否包含待检测的目标&#xff0c;还需要在图片中指出它们的位置。2015 年&#xff0c;Joseph Redmon, Santosh Divvala 等人…

【问题总结】为什么路由器可以互联下三层不同的协议?【从隔离冲突域和广播域的角度分析】【数据传输过程】

问题 要想知道为什么路由器可以互联下三层不同的协议&#xff0c;我们首先要把一个包的传输弄清楚&#xff0c;而在第二层是帧的模式&#xff0c;第三层是IP数据报的格式&#xff0c;我们先分析发送方式&#xff0c;再来解决问题。 四种不同的发送方式 数据链路层 链路层单…

物联网AI MicroPython传感器学习 之 mpu6050六轴陀螺仪传感器

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 MPU6050是一款6轴运动传感器&#xff0c;它集成了3 轴MEMS 陀螺仪&#xff0c;3 轴MEMS加速度计&#xff0c;以及一个可扩展的数字运动处理器DMP&#xff08;Digital Motion Processor&#xf…

Android Studio 下载地址

一、Android Studio 下载地址及版本说明 1.Android 开发者官网&#xff1a;&#xff08;1&#xff09;Android Developers &#xff08;全球&#xff0c;需科学上网&#xff09; &#xff08;2&#xff09;https://developer.android.google.cn/index.html &#xff08;国内&a…

moviepy处理手机端图片旋转问题

1.手机拍摄的图片或者在ffmpeg处理的时候&#xff0c;会读取图片的元数据从而进行旋转 左边是拍摄的图片&#xff0c;右侧是进行处理以后得图片 video VideoFileClip(file_path) if video.rotation in (90, 270):video video.resize(video.size[::-1])video.rotation 0

生成一篇博客,详细讲解springboot的单点登录功能,有流程图,有源码demo

SpringBoot是目前非常流行的一个Java开发框架&#xff0c;它以简洁的配置和快速的开发效率著称。在实际应用中&#xff0c;单点登录是一个非常重要的功能&#xff0c;它可以让用户在多个应用系统中使用同一个账号登录&#xff0c;提高用户体验和安全性。本文将详细讲解如何在Sp…

YouTube博主数据信息资源

YouTube博主数据信息资源 &#x1f525;我是一位拥有10年编程经验的程序猿&#xff0c;为你带来一个全新的优质资源 &#x1f50d;您是否在寻找最新、最活跃的YouTube博主数据&#xff0c;以助力你的项目、营销或研究&#xff1f; 我们的数据&#xff0c;您的优势&#xff1a;…

2023-JS

如何判断两个数组的内容是否相等 1.数组 let arr1 [1,2,3,4] let arr2 [1,2,3,4]方案&#xff1a; (一):通过转成字符串&#xff1a;JSON.stringfity() (二):通过循环2.数组对象 let arr1 [{id: 1, name: s}] let arr2 [{id: 1, name: s},{id: 2, name: a}] post为什么会发…

ZYNQ连载05-Vitis更新xsa硬件配置

ZYNQ连载05-Vitis更新xsa硬件配置 1. 简述 在开发过程中&#xff0c;Vivado中硬件配置在开发过程中有所变动&#xff0c;Vitis需要根据Vivado生成的xsa文件&#xff0c;更新相应的BSP配置 2. 操作步骤

Node编写更新用户信息接口

目录 前言 定义路由和处理函数 验证表单数据 实现更新用户基本信息的功能 前言 继前面几篇文章&#xff0c;本文介绍如何编写更新用户信息接口 定义路由和处理函数 路由 // 更新用户信息接口 router.post(/userinfo, userinfo_handler.updateUserinfo) 处理函数 // 导…

机器学习-朴素贝叶斯之多项式模型

多项式模型&#xff1a; 记住一定用于离散的对象&#xff0c;不能是连续的 于高斯分布相反&#xff0c;多项式模型主要适用于离散特征的概率计算&#xff0c;切sklearn的多项式模型不接受输入负值 因为多项式不接受负值的输入&#xff0c;所以样本数据的特征为数值型数据&…

【2023年冬季】华为OD统一考试(B卷)题库清单(已收录345题),又快又全的 B 卷题库大整理

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治递归…