获取SpringCloud gateway 响应的response的值,可以查看、修改

spring cloud gateway 网关路由转发及request、response的加解密处理 sygateway的介绍和使用原理请自行查阅和学习,本章内容需在对spring cloud gateway的基本的了解和一定的知识基础上进行的。附上一个可供学习的博文:SpringCloud gateway (史上最全) - 疯狂创客圈 - 博客园 需求场景: 前端对post请求的数据进行加密(主流的加密方式),后端需要解密,将接口的响应数据进行加密返回,前端解密并展示或其他操作等。出于安全性的考虑和可扩展性故使用了网关来做。 涉及到的问题: 1、request的body数据流读取只能读取一次,co 阅读详情

gateway获取、修改客户端请求Request的参数,我们在上一篇已经讲过了。那么网关发起请求后,微服务返回回来的response的值,还是要经过网关才发给客户端的。很多时候,我们希望能看到响应的值,或者修改它。那么怎么做呢?

    import org.reactivestreams.Publisher;
    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.core.io.buffer.DataBufferFactory;
    import org.springframework.core.io.buffer.DataBufferUtils;
    import org.springframework.http.server.reactive.ServerHttpResponse;
    import org.springframework.http.server.reactive.ServerHttpResponseDecorator;
    import org.springframework.stereotype.Component;
    import org.springframework.web.server.ServerWebExchange;
    import reactor.core.publisher.Flux;
    import reactor.core.publisher.Mono;
     
    import java.nio.charset.Charset;
     
    /**
     * @author wuweifeng wrote on 2018/10/31.
     */
    @Component
    public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {
        @Override
        public int getOrder() {
            // -1 is response write filter, must be called before that
            return -2;
        }
     
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
            ServerHttpResponse originalResponse = exchange.getResponse();
            DataBufferFactory bufferFactory = originalResponse.bufferFactory();
            ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {
                @Override
                public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
                    if (body instanceof Flux) {
                        Flux<? extends DataBuffer> fluxBody = (Flux<? extends DataBuffer>) body;
                        return super.writeWith(fluxBody.map(dataBuffer -> {
                            // probably should reuse buffers
                            byte[] content = new byte[dataBuffer.readableByteCount()];
                            dataBuffer.read(content);
                            //释放掉内存
                            DataBufferUtils.release(dataBuffer);
                            String s = new String(content, Charset.forName("UTF-8"));
                            //TODO,s就是response的值,想修改、查看就随意而为了
                            byte[] uppedContent = new String(content, Charset.forName("UTF-8")).getBytes();
                            return bufferFactory.wrap(uppedContent);
                        }));
                    }
                    // if body is not a flux. never got there.
                    return super.writeWith(body);
                }
            };
            // replace response with decorator
            return chain.filter(exchange.mutate().response(decoratedResponse).build());
        }
    }

就是定义这样一个GlobalFilter,注意order要小于-1.通过上面的类,就能查看服务端响应的值了。

参考:https://github.com/spring-cloud/spring-cloud-gateway/issues/47

SpringCloud GateWay通过过滤器GatewayFilter修改请求或响应内容 Spring Cloud Gateway在有些场景中需要获取request body内容进行参数校验或参数修改,我们通过在GatewayFilter中获取请求内容来获取和修改请求体。 阅读详情

相关推荐

深入探索 org.springframework.http.server.reactive.ServerHttpRequest:Reactive世界中的HTTP请求处理

深入探索 org.springframework.http.server.reactive.ServerHttpRequest:Reactive世界中的HTTP请求处理

一起coding,一起嗨。 1383

获取SpringCloud gateway响应的response的并进行修改

文章目录一、需求说明:二、解决方案:三、代码实现 一、需求说明: 由于公司的项目接入了几个几个服务进来,因为这几个服务接口返回的结果对象没有统一,前端需要后端将返回结果对象统一。 二、解决方案: 在网关写一个全局过滤器去对接口返回结果对象进行重构然后返回给前端。 三、代码实现 package com.jzt.zyy.gateway.filter; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import

suchahaerkang的博客 8034

springcloud篇2-feign、gateway

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

qq_51476492的博客 1537

SpringCloud GateWay 网关 在GlobalFilter 拿出返回数据response

文章主旨:   将返回数据拿出来,然后各种处理。 正文 ========== 先看该篇文章的示例接口: 红色框框里面就是返回的 response 数据 。 现在我们想要的就是 在返回给到调用方(前端、第三方等)前,我们抓出来数据,随便改一下东西。 例如: 我要把里面的message 提示语改了。 新建一个全局过滤器: WrapperResponseGlobalFilter.java import com.alibaba.fastjson.JSONObject; import

m0_64867152的博客 1366

[ESP32]:基于esp-modbus实现serial主机

[ESP32]:基于esp-modbus实现serial主机

LINKKEEE的博客 2567

IEC61850建模实战:从标准解读到ICD文件生成

本文详细介绍了IEC61850建模的实战过程,从标准解读到ICD文件生成,涵盖了变电站自动化系统的结构化数据模型设计。通过分层结构、标准服务映射和XML文件解析,帮助读者掌握电力系统智能电子设备的标准化建模方法,提升工程实施效率。

weixin_30823001的博客 415

Spring Cloud Gateway 修改HTTP响应信息

实践Spring Cloud的过程中,使用Gateway作为路由组件,并且基于Gateway实现权限的验证、拦截、过滤,对于下游微服务的响应结果,我们总会有需要修改以统一数据格式,或者修改过滤用户没有权限看到的数据信息,这时候就需要有一个能够修改响应体的Filter。 Spring Cloud Gateway 版本为2.1.0 在当前版本,ModifyRequestBodyGatewayFil...

帷幄庸者的博客 1万+

Unity3D赛车游戏+脚本基础

本章主要介绍Unity的基础开发流程以及涉及到的概念。这个过程需要我们学会编写一些游戏脚本,在这讲的过程中我们会完成一个赛车小游戏,因此,在讲述这些基本概念和流程的时候,会同时涉及到一点脚本的开发基础.在游戏,电影和动画中,都有一个渲染的帧率,电影是24帧/s,游戏大概是30帧/s(当然也有60帧/s的)。在unity里面1秒钟,Update方法执行了30次。1秒钟有30帧,帧与帧之所消耗的时间是不一样的,那么我如何知道上一帧用了多少时间?Time.deltaTime就是为了解决这个问题。

m0_58367586的博客 7657

SpringCloud gateway 统一响应结果,修复服务提供方response Body 为空时可正常返回

spring cloud gateway 统一响应结果 网上较多资料的处理方案是如下:(https://blog.youkuaiyun.com/tianyaleixiaowu/article/details/83618037) import org.reactivestreams.Publisher; import org.springframework.cloud.gateway.filter.Gatewa...

zhouwangzong的专栏 9209

基于51单片机的通讯聊天系统

通过编写51单片机通讯聊天程序,掌握51单片机的各个模块的知识点和运用C语言编写51单片机的能力。用51单片机与口袋开发板设计实现一个单片机与电脑串口助手实现通讯功能的程序。程序的主要功能如下: 1 OLED初始化显示Welcome to Bluetooth communication! 字符串。 2 程序开始时处于接收信息模式, 电脑串口助手发送信息时,将从初始化字符第一个开始显示,电脑串口助手发送信息后,蜂鸣器响铃2秒左右。 3 每次同时按下左右键时,可以轮流切换接收/发送信息模式 4 在发送信息模式时

m0_47419053的博客 3638

CrackerXI+脱壳实战:解决iOS应用逆向中的加密文件问题

本文详细介绍了如何使用CrackerXI+工具对iOS应用进行脱壳,解决App Store应用因FairPlay DRM加密而无法进行静态分析的难题。通过图形化界面一键操作,CrackerXI+能高效获取解密后的可执行文件,为逆向工程奠定基础。文章涵盖工具选型、实战步骤及常见问题排查,是iOS逆向入门与进阶的实用指南。

seed的博客 258

SpringCloud Gateway 获取 request body response write

话不多说,直接上码 /** * @author liuhanling * @create 2018-12-14 20:01 * @desc */ @Slf4j @Component public class RequestBodyFilter implements GatewayFilter, Ordered { private static final String CACHE...

weixin_33897722的博客 2404

PowerShell 升级到 v7 并设置为默认版本(详细操作指南)

本文详细介绍了如何将PowerShell升级到v7并设为默认版本。PowerShell 7基于.NET Core构建,具有跨平台支持、性能优化和新语法特性等优势。文章提供了多种安装方法(MSI安装包、包管理器)和设置默认版本的方案(修改PATH、创建符号链接、配置编辑器等),同时涵盖企业批量部署解决方案和常见问题处理。通过升级到PowerShell 7,用户可以获得更强大的命令行体验,适用于开发、运维和自动化场景。

huluang的专栏 4291

spring cloud gateway 修改response 截断问题,乱码问题解决

乱码问题其实就是返回数据gateway 进行了截断所产生的,所以我们需要把返回的组进行join上就不会产生乱码的,如果还是乱码,请根据自己系统的实际编码进行转换即可,完美解决, 请注意:这篇文章不同于以往文章这里使用的是DefaultDataBufferFactory 的join方法去合并多个dataBuffers ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 最大的区别 DataBufferFact...

荡漾 1万+

SY6982C 7.4V锂电池1A充电模块原理图设计,已量产

在手持设备、便携工具与小型无人机等场景中,7.4V(2S)锂聚合物电池的应用愈发广泛。这类电池对充电系统的安全性、效率与兼容性提出了明确要求:需支持 USB 5V 输入、1A 安全充电,同时具备多重保护机制。本文将结合一款基于 SY6982C 的充电原理图,深入解析其电路设计与技术亮点。

不脱发的程序猿 360

Open3D 可视化(1)——简单可视化【2026最新版】

简单可视化,博客长期更新,本文最新更新时间为:2026年5月10日。

点云侠的博客 5684

Spring Cloud Gateway修改请求和响应body的内容

请求到了Gateway后,可以被Gateway做了修改,再转发给真正的服务提供者,这些小把戏,有时候也能发挥重要的作用

程序员欣宸的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

spring cloud gateway Response 修改bug

spring cloud gateway Response修改后,返回值中及个别字符乱码。 相信很多人接触了spring cloud gateway,但是少数人会真正把它直接用在项目上,我们的新项目快上线了,整个开发过程中遇到了很多问题,简单说一下感受,现阶段spring cloud gateway相关资料太少,很多东西查不到,很多时候需要自己去看源码自己去仿照源码重新去写,而且大坑往往更是查不...

ahty的专栏 1934

jre9下载 jdk9

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring Cloud Gateway-ServerWebExchange修改请求和响应内容

前提 本文编写的时候使用的Spring Cloud Gateway版本为当时最新的版本Greenwich.SR1。 我们在使用Spring Cloud Gateway的时候,注意到过滤器(包括GatewayFilter、GlobalFilter和过滤器链GatewayFilterChain),都依赖到ServerWebExchange: public interface GlobalFilter ...

SuperBins的博客 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

springcloud gateway 源码解析、请求响应流程、第三方响应结果在 gateway 的经过

大家好,我是烤鸭: 1. 官方介绍 官方文档: 看的是 2.2.5.RELEASE版本的 https://docs.spring.io/spring-cloud-gateway/docs/2.2.5.RELEASE/reference/html/ 看一下官方这段说明,gateway 使用的是 webflux 和 reactor,有一些同步的包(data,security 可能不支持)。 还有就是需要netty作为服务器,传统的 servlet 模型和 war 包不支持。 工作流程: ..

烤鸭的世界我们不懂。 3743

SpringCloud GateWay 网关 在GlobalFilter 拿出返回数据response(1)

机会是留给有准备的人,大家在求职之前应该要明确自己的态度,熟悉求职流程,做好充分的准备,把一些可预见的事情做好。对于应届毕业生来说,校招更适合你们,因为绝大部分都不会有工作经验,企业也不会有工作经验的需求。同时,你也不需要伪造高大上的实战经验,以此让自己的简历能够脱颖而出,反倒会让面试官有所怀疑。你在大学时期应该明确自己的发展方向,如果你在大一就确定你以后想成为Java工程师,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实Java基础。请转发本文支持一下。

2401_83915900的博客 800
上一篇: 记一次xxl-job配置的cron表达式没有触发定时任务
下一篇: freemark对千分位数字处理为正常格式,对返回值null处理
qq_34412985
博客等级 码龄11年 143粉丝 983原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值