【golang】gin 权限和参数拦截器

时间:2025-03-02 09:31:44
package interceptor import ( "bytes" "/gin-gonic/gin" log "/sirupsen/logrus" "net/http" ) // http 请求拦截器 func HttpInterceptor() gin.HandlerFunc { return func(c *gin.Context) { // 签名校验逻辑,逻辑调用自己的签名逻辑即可 // checkSign := (c) // if !checkSign { // () // return // } request := c.Request _ = request.ParseForm() // 获取参数值 req, ok := getReqParam(c, request) if ok { return } // 获取响应结果 blw := &bodyLogWriter{body: bytes.NewBufferString(""), ResponseWriter: c.Writer} c.Request = request c.Writer = blw // 执行下一个 c.Next() // 获取 响应 realIp := util.GetRealIp(request) log.Info("请求地址:", c.FullPath(), ",请求ip:", realIp, ",Referer:", request.Referer(), ",请求参数:", req, ",响应参数:", blw.body.String()) } } func getReqParam(c *gin.Context, request *http.Request) (string, bool) { req := request.Form.Encode() // if(len((req,"")) <= 0) if !util.IsBlank(req) { return req, false } // 获取body的值,后面的请求参数消失,暂时注释 //body := //data, err := (body) 获取请求 data, err := () //if err != nil { // // 执行下一个 // () // return "", true //} //req = string(data) return "", false } type bodyLogWriter struct { gin.ResponseWriter body *bytes.Buffer } func (w bodyLogWriter) Write(b []byte) (int, error) { w.body.Write(b) return w.ResponseWriter.Write(b) }