swagger修改,限流令牌桶配置化
This commit is contained in:
55
middleware/middleware.go
Normal file
55
middleware/middleware.go
Normal file
@@ -0,0 +1,55 @@
|
||||
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().Get(context.TODO(), "rate.limit")
|
||||
var rateBurst, _ = g.Cfg().Get(context.TODO(), "rate.burst")
|
||||
var limiter = rate.NewLimiter(rate.Limit(rateLimit.Int()), rateBurst.Int())
|
||||
|
||||
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) {
|
||||
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"
|
||||
}
|
||||
Reference in New Issue
Block a user