39 lines
703 B
Go
39 lines
703 B
Go
|
|
package middleware
|
||
|
|
|
||
|
|
import (
|
||
|
|
"bytes"
|
||
|
|
"fmt"
|
||
|
|
|
||
|
|
"github.com/gin-gonic/gin"
|
||
|
|
)
|
||
|
|
|
||
|
|
// 原理是创建的时候注入了一个方法处理响应的信息
|
||
|
|
|
||
|
|
func ResponseFilterMiddleware(c *gin.Context) {
|
||
|
|
|
||
|
|
fmt.Println(c.Writer)
|
||
|
|
blw := &bodyLogWriter{
|
||
|
|
body: bytes.NewBufferString(""),
|
||
|
|
ResponseWriter: c.Writer,
|
||
|
|
}
|
||
|
|
c.Writer = blw
|
||
|
|
c.Next()
|
||
|
|
|
||
|
|
statusCode := c.Writer.Status()
|
||
|
|
|
||
|
|
fmt.Println(statusCode)
|
||
|
|
fmt.Println("拦截输出")
|
||
|
|
}
|
||
|
|
|
||
|
|
type bodyLogWriter struct {
|
||
|
|
gin.ResponseWriter
|
||
|
|
body *bytes.Buffer
|
||
|
|
}
|
||
|
|
|
||
|
|
// 真正输出的时候,它会调用这个输出方法
|
||
|
|
func (w bodyLogWriter) Write(b []byte) (int, error) {
|
||
|
|
// b = []byte(`{"code":0}`)
|
||
|
|
w.body.Write(b)
|
||
|
|
return w.ResponseWriter.Write(b)
|
||
|
|
}
|