From 35a3d56e1f5762a7f5afc71c3c132128d2e272d4 Mon Sep 17 00:00:00 2001 From: "DESKT-DMCDGMMAS\\Administrator" <995116474@qq.com> Date: Sat, 11 May 2024 17:07:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=BA=9B=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- middleware.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/middleware.go b/middleware.go index ee129ea..9299bf9 100644 --- a/middleware.go +++ b/middleware.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "io" + "net/http" "github.com/gin-gonic/gin" uuid "github.com/satori/go.uuid" @@ -19,25 +20,31 @@ func SetTradeId(ctx context.Context) context.Context { // 中间件 gin框架保存请求相关信息 func MiddlewareGetGinParams(log *Logger) gin.HandlerFunc { return func(ctx *gin.Context) { + // 使用bytes.Buffer来读取并记录请求体,同时避免改变ctx.Request.Body buf := &bytes.Buffer{} tea := io.TeeReader(ctx.Request.Body, buf) + + // 读取body body, err := io.ReadAll(tea) if err != nil { - // panic(err) + log.Infof(ctx, "Error reading request body: %v", err) + ctx.AbortWithStatus(http.StatusInternalServerError) + return } // 截取body的前1000个字符 - bodys := string(body) - if len(bodys) > 1000 { - bodys = bodys[:1000] - } + bodyStr := string(body) + if len(bodyStr) > 1000 { + bodyStr = bodyStr[:1000] + } + // 使用NopCloser包裹buffer,仅为了确保在读取body之后body可以被关闭,但并不改变原始的Request.Body ctx.Request.Body = io.NopCloser(buf) m := map[string]interface{}{ "method": ctx.Request.Method, "uri": ctx.Request.RequestURI, - "body": bodys, + "body": bodyStr, "query": ctx.Request.URL.Query(), "header": ctx.Request.Header, }