SpringCloud Gateway 修改请求路径(判断请求路径是否符合当前环境)

SpringCloud Gateway 修改请求路径的过滤器(StripPrefix Filter和PrefixPath Filter) 一:StripPrefix Filter 1.1 StripPrefix Filter 是一个请求路径截取的功能,我们可以利用这个功能来做特殊业务的转发。 1.2 修改 application-predicate-path.yml 文件,代码如下: server: port: 8769 #--- #三个横线表示再创建一个配置文件 spring: #profiles:... 阅读详情
package com.gitee.cashzhang27.ftf.gateway.filter;

import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR;
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE;
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.addOriginalRequestUrl;

import cn.hutool.json.JSONUtil;
import com.gitee.cashzhang27.ftf.common.core.entity.Response;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.util.pattern.PathPattern;
import reactor.core.publisher.Mono;

/**
 * @author Cash Zhang
 * @version v1.0
 * @since 2019/03/10 17:16
 */
@Component
public class RequestGlobalFilter implements GlobalFilter, Ordered {

  @Value("${spring.profiles.active}")
  private String active;

  private final static String SEGMENT = "-";

  /**
   * Process the Web request and (optionally) delegate to the next {@code WebFilter} through the
   * given {@link GatewayFilterChain}.
   *
   * @param exchange the current server exchange
   * @param chain provides a way to delegate to the next filter
   * @return {@code Mono<Void>} to indicate when request processing is complete
   */
  @Override
  public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    ServerHttpRequest request = exchange.getRequest();
    ServerHttpResponse response = exchange.getResponse();
    // 获取请求路径前缀(api-dev/api-prod)
    PathPattern.PathMatchInfo pathMatchInfo = exchange
        .getAttribute(URI_TEMPLATE_VARIABLES_ATTRIBUTE);
    if (pathMatchInfo != null) {
      Map<String, String> uriVariables = pathMatchInfo.getUriVariables();
      String api = uriVariables.get("api");
      // 判断请求路径是否符合当前环境
      if (!api.split(SEGMENT)[1].equals(active)) {
        byte[] responseBytes = JSONUtil
            .toJsonStr(Response
                .failed(HttpStatus.FORBIDDEN.value(), HttpStatus.FORBIDDEN.getReasonPhrase()))
            .getBytes(StandardCharsets.UTF_8);
        DataBuffer buffer = response.bufferFactory().wrap(responseBytes);
        response.setStatusCode(HttpStatus.FORBIDDEN);
        response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
        return response.writeWith(Mono.just(buffer));
      }
    }

    // 将StripPrefixGatewayFilter加入全局过滤器中
    addOriginalRequestUrl(exchange, request.getURI());
    String rawPath = request.getURI().getRawPath();
    String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, "/"))
        .skip(2L).collect(Collectors.joining("/"));
    ServerHttpRequest newRequest = request.mutate()
        .path(newPath)
        .build();
    exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());

    return chain.filter(exchange.mutate()
        .request(newRequest).build());
  }

  @Override
  public int getOrder() {
    return -1000;
  }
}

 

若依RuoYi-Cloud代码学习三---ruoyi-gateway扩展gateway网关组件的知识 一、API 网关概述 作为微服务的门面,应用于服务数量众多、复杂度较高、规模比较大的系统。 优点: 客户端通过 API 网关与微服务交互时,客户端只需要知道 API 网关地址即可,而不需要维护大量的服务地址,简化了客户端的开发。 客户端直接与 API 网关通信,能够减少客户端与各个服务的交互次数。 客户端与后端的服务耦合度降低。 节省流量,提高性能,提升用户体验。 API 网关还提供了安全、流控、过滤、缓存、计费以及监控等 API 管理功能。 常见API 网关实现方案 Spring Cloud G 阅读详情

相关推荐

SpringCloud之Gateway服务网关

目录`gateway` 与 `zuul``springcloud gateway` 简介 gateway 与 zuul gateway 是 springcloud 微服务平台的一个子项目,属于 spring 开源社区,依赖名叫:spring-cloud-starter-gateway。官网:https://spring.io/projects/spring-cloud-gateway zuul 是 netflix 公司的开源项目,springcloud 在 netflix 项目中也已经集成了 zuul,依

桐花思雨 1万+

在gateway的filter中修改request uri的serviceId进行路由

每个租户都有专属的后台处理服务,后台服务在打包时将该租户的数据库连接与serviceId的信息打包进工程,前端在发出请求时不需要关注租户的serviceId,在网关层根据每次请求中request header中的token进行serviceI的的替换实现“租户与租户之间的数据物理隔离,业务与业务隔离”。方案有逻辑隔离与物理隔离,但是在考虑SAAS平台数据体量与数据安全的情况下,最终选择使用物理隔离。在百度上翻了很久,均是只要修改serviceId就会404,最终还是在谷歌上找到了。实现多租户的数据隔离。

qq_26274037的博客 1749

springcloud篇2-feign、gateway

说明:(1)日志级别NONE-没有日志BASIC-记录请求的开始和结束时间HEADERS-记录请求的开始和结束时、请求头和响应头FULL-记录请求的开始和结束时、请求头和响应头、请求体和响应体但该方式不推荐,会导致紧耦合。之前的微服务允许任何的访问,不安全,需要添加一个网关(功能包括身份认证和权限校验、服务路由、负载均衡、请求限流)。

qq_51476492的博客 1537

spring cloud gateway 修改请求路径Path

一、背景: 项目升级改造,老项目使用请求url中特定参数进行服务路由,现使用gateway网关进行路由服务信息 二、根据参数信息修改请求路径Path @Component public class RequestFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chai..

ZHANGSHUN_qi的博客 8250

SpringCloud Gateway路由核心原理解析

SpringCloud Gateway 是 Spring 官方基于 Spring Spring Boot 和 Project Reactor 等技术开发的网关,Gateway 旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Gateway作为 Spring Cloud 生态系中的网关,目标是替代 ZUUL,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了关基本的功能,例如:安全,监控/埋点,和限流等。

雨后是冰雹 2537

网关GateWay的使用详解、路由、过滤器、跨域配置

gateway网关基础概念,以及最常用的功能在SpringBoot、SpringCloud微服务项目中如何使用

qq_44749491的博客 3万+

spring cloud gateway获取请求的真实地址

在使用spring cloud gateway的时候,路由一般配置为服务名 例如 lb://BASE-API-WEB/xxx/bbb 路径,我们无从知道,他真正路由到什么地方去了。 经过查看源码我发现了, org.springframework.cloud.gateway.filter.LoadBalancerClientFilter 这个filter中 对lb请求进行了处理,转换成真正的...

一只猪啊啊的博客 3万+

混合整数规划(MIP)在资源优化中的实战应用

本文深入探讨了混合整数规划(MIP)在资源优化中的实战应用,从菜市场采购到工厂调度,再到物流配送和钢铁厂切割问题。通过分支定界法和割平面法等技术,MIP能够有效解决包含整数和连续变量的复杂优化问题,提升企业运营效率。文章还介绍了现代求解器的优化策略和实际项目中的避坑指南,帮助读者更好地应用MIP技术。

weixin_30500105的博客 90

SpringCloud gateway原理分析

SpringCloud gateway原理分析前置说明使用说明原理介绍配置的加载路由的获取流程的执行总结 前置说明 本文源码基于 springcloud Finchley 版本. 以下分析仅代表个人的理解, 如有错误, 欢迎探讨. 使用说明 以spring一贯的作风, 用户使用的模式都是约定俗成的, 也就是引入spring-cloud-starter-gateway 依赖, 然后就可以愉快的自动配置了. 但是这里有一个要说的点, springcloud gateway是只能使用在 webflux上面,

cdy1996的博客 7783

【计算机视觉】pyrealsense2:Intel RealSense 深度相机的 Python 接口实战指南

pyrealsense2:Intel RealSense 深度相机的 Python 接口实战

weixin_43988131的博客 4350

MAIXCAM无线连接实战:5分钟搞定远程调试与代码烧录(避坑版)

本文提供了一份详细的MAIXCAM无线连接实战指南,帮助嵌入式视觉开发者快速配置远程调试与代码烧录。文章重点介绍了通过MaixHub IDE进行Wi-Fi配置、建立远程终端连接、使用SFTP进行文件传输以及管理自启动应用程序的完整流程,并针对IP地址变动、信号中断等常见问题提供了实用的避坑解决方案,旨在提升开发效率与灵活性。

weixin_29188043的博客 297

SpringCloud 组件Gateway服务网关【断言工厂&过滤器工厂】

断言工厂,过滤器工厂:路由过滤器的种类,请求头过滤器,默认过滤器

日常学习总结 3277

环境配置与基础教程:当前大厂主流套路:使用 MLflow 全链路管理 YOLO 实验参数、指标与模型版本

YOLO26与MLflow结合实现高效实验管理 YOLO26通过移除DFL模块和实现无NMS端到端推理,在CPU推理速度上提升43%,同时简化了模型导出流程。MLflow 3.10/3.11版本新增多工作区支持、成本追踪和安全序列化等功能,为机器学习实验提供全生命周期管理。两者结合可解决传统"截图+Excel"式实验管理的痛点,实现参数追踪、指标对比和模型版本控制的自动化。 关键优势: YOLO26架构优化带来显著性能提升 MLflow提供实验到生产的全链路管理 原生集成简化了计算机视觉

ZXSXJ的博客 191

SpringCloud Gateway

工厂类型:After:基于请求时间的"之后"断言Before:基于请求时间的"之前"断言Between:时间区间断言Cookie:检查请求CookieHeader:检查请求头Host:检查请求主机Method:检查请求方法(GET/POST等)Path:检查请求路径Query:检查查询参数RemoteAddr:检查远程地址Weight:权重路由核心特性:内置多种工厂类型:共11种标准断言工厂多属性匹配:每种工厂匹配HTTP请求的不同属性。

你好, 我在学java的博客 2149

Lammps实现随机粗糙度表面沸腾

Lammps实现随机粗糙度表面沸腾前言 前言

Rockyoung 2703

【2026年华为暑期实习(AI)-4月8日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

答案与解析 1. 相关系数问题 答案:C. 完全负线性相关 解析:相关系数ρ=-1表示X和Y之间存在完全负线性相关关系,所有数据点都严格落在一条斜率为负的直线上。 2. 矩阵秩问题 答案:B. Σ的对角线上非零奇异值的个数 解析:矩阵A的秩等于其奇异值矩阵Σ中非零奇异值的个数,因为U和V都是正交矩阵,不改变矩阵的秩。 3. 条件概率问题 答案:B. 0.5 解析:根据全概率公式和贝叶斯公式计算,P(B)=0.5×0.4+0.3×0.6=0.38,P(A|B)=(0.5×0.4)/0.38≈0.526,最接近

m0_73659489的博客 287

SpringCloud之Gateway

SpringCloudAlibaba之gateway

folyh 1749

土壤数据库辅助工具SPAW计算土壤导水率

首先点击打开根据之前的1比100土壤数据查表得到各个组分含量其中Field Capacity是田间持水量Matric Bulk Density是基质粒密度。

所有专家都曾始于新手 3443

SpringCloud Gateway 网关

简介   网关作为流量的入口,常用功能包括路由转发、权限校验、限流控制等;而SpringCloud Gateway 作为SpringCloud 官方推出的第二代网关框架,取代了Zuul网关    特征 建立在Spring Framework 5,Project Reactor和Spring Boot 2.0之上 能够匹配任何请求属性上的路由 路由有独特的断言和过滤器 集成断路器 集成Spring Cloud DiscoveryClient integration 易于编写断言和过滤器 请求限速 路.

华小灼 379

【UML】第12篇 序列图(1/2)——基本概念和构成

序列图(Sequence Diagram)是一种用于显示对象之间交互的图形化表示。它描述了在特定场景下,对象之间按照时间顺序进行的消息传递和协作过程。在序列图中,对象被表示为带有垂直虚线的矩形,虚线表示对象的生命周期。对象之间的交互通过箭头表示的消息来表示,箭头从一个对象的生命线指向另一个对象的生命线,表示消息的发送和接收。

AI人人懂 3045

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【Springcloud】路由网关GateWay

【Springcloud】(08)路由网关Zuul和GateWay(1)简单说明(2)GateWay是什么(3)GateWay非阻塞异步模型(4)GateWay工作流程(5)GateWay9527搭建(6)GateWay配置路由的两种方式(7)GateWay配置路由的两种方式(8)GateWay常用的Predicate(9)GateWay得Filter (1)简单说明 微服务技术必须要有网关,让网...

weixin_44823875的博客 5650

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【SpringCloud】-GateWay源码解析

当一个请求来到 Spring Cloud Gateway 之后,会经过一系列的处理流程,其中涉及到路由的匹配、过滤器链的执行等步骤。今天我们来说说请求经过 Gateway 的主要执行流程和原理是什么吧。

一起加油吧~ 2576

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【黑马-SpringCloud技术栈】【07】Gateway

SpringCloudGateway

Keep Reading Keep Writing Keep Thinking 480

SpringCloud Gateway路由网关

文章目录简介routes 路由服务配置文件方式Java DSL方式predicates 路由断言filters 过滤功能自定义过滤器 简介 基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术, 目标是替代 Netflix ZUUL 千万不要依赖 引入spring-boot-starter-web包 客户端向 Spring Cloud Gateway 发出请求。 在 Gateway Handler Mapping 中找到与请求相匹配的路由, 将其发送到

xyc1211的博客 1万+

SpringCloud——Gateway、Config、Bus的使用

目录 七、网关 Spring Cloud Gateway 八、配置中心 Spring Cloud Config 九、消息总线 Spring Cloud Bus SpringCloud 总架构图 七、网关 Spring Cloud Gateway 跳转到目录 2.1 简介 Gateway网关是我们服务的守门神,所有微服务的统一入口。Spring Cloud Gateway 是 Spring C...

Guizy 1741

SpringCloud Gateway 重试路由器的过滤器

一:重试路由器的过滤器RetryGatewayFilter 1.1 RetryGatewayFilter 是 Spring Cloud Gateway 对请求重试提供的一个 GatewayFilter Factory 1.2 修改 application-predicate-path.yml 文件,代码如下: server: port: 8769 #--- #三个横线表...

weixin_40991408的博客 987
上一篇: 企业各职位英文缩写
下一篇: Seata 分布式事务 + Eureka + MyBatisPlus
cashZhang27
博客等级 码龄10年 22粉丝 67原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值