package middleware import ( "context" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/text/gstr" "golang.org/x/time/rate" ) // Logger 中间件 func Logger(r *ghttp.Request) { startTime := gtime.TimestampMilli() r.Middleware.Next() endTime := gtime.TimestampMilli() g.Log().Infof(r.GetCtx(), "request: %s %s | status: %d | time: %dms", r.Method, r.URL.Path, r.Response.Status, endTime-startTime, ) } var rateLimit = g.Cfg().MustGet(context.TODO(), "rate.limit").Int() var rateBurst = g.Cfg().MustGet(context.TODO(), "rate.burst").Int() var limiter = rate.NewLimiter(rate.Limit(rateLimit), rateBurst) func Limiter(r *ghttp.Request) { if !limiter.Allow() { r.Response.WriteStatusExit(429) // Return 429 Too Many Requests r.ExitAll() } r.Middleware.Next() } func Auth(r *ghttp.Request) { //utils.GetUserInfo(r.GetCtx()) token := r.Header.Get("Authorization") if token == "" || !gstr.HasPrefix(token, "Bearer ") { r.Response.WriteStatusExit(401, "Unauthorized") return } // 验证 token if !validateToken(gstr.SubStrFrom(token, "7")) { r.Response.WriteStatusExit(401, "Unauthorized") return } r.Middleware.Next() } func validateToken(token string) bool { // 实现 token 验证逻辑 return token == "valid-token" }