标签:beego err ctx 限速 limiterCtx limiter com 代孕
路由之前调用
import "github.com/ulule/limiter/v3"
import "github.com/ulule/limiter/v3/drivers/store/memory"
type rateLimiter struct {
generalLimiter *limiter.Limiter
loginLimiter *limiter.Limiter
}
func main(){
r := &rateLimiter{}
rate, err := limiter.NewRateFromFormatted("5-S")
PanicOnError(err)
r.generalLimiter = limiter.New(memory.NewStore(), rate)
loginRate, err := limiter.NewRateFromFormatted("5-M")
PanicOnError(err)
r.loginLimiter = limiter.New(memory.NewStore(), loginRate)
//More on Beego filters here https://beego.me/docs/mvc/controller/filter.md
beego.InsertFilter("/*", beego.BeforeRouter, func(c *context.Context) {
rateLimit(r, c)
}, true)
beego.Run()
}
具体实现
func rateLimit(r *rateLimiter, ctx *context.Context) { var ( limiterCtx limiter.Context ip net.IP err error req = ctx.Request ) if strings.HasPrefix(ctx.Input.URL(), "/v1/user/login") { ip = r.loginLimiter.GetIP(req) limiterCtx, err = r.loginLimiter.Get(req.Context(), ip.String()) } else { ip = r.generalLimiter.GetIP(req) limiterCtx, err = r.generalLimiter.Get(req.Context(), ip.String()) } if err != nil { PanicOnError(err) } h := ctx.ResponseWriter.Header() h.Add("X-RateLimit-Limit", strconv.FormatInt(limiterCtx.Limit, 10)) h.Add("X-RateLimit-Remaining", strconv.FormatInt(limiterCtx.Remaining, 10)) h.Add("X-RateLimit-Reset", strconv.FormatInt(limiterCtx.Reset, 10)) if limiterCtx.Reached { fmt.Println("Too Many Requests from %s on %s", ip, ctx.Input.URL()) ctx.Output.SetStatus(429) resBytes, err := json.Marshal(controllers.OutResponse(429, nil, "")) if err != nil { fmt.Println(err) } ctx.Output.Body(resBytes) return } } ``
- 国内代孕公司 代孕公司官网 代孕公司【网址:bztss.com】 代孕网【网址:bztss.com】 杭州代孕【网址:bztss.com】 成都代孕【网址:za9s.com】 南昌代孕【网址:bztss.com】 济南代孕【网址:bztss.com】 南昌代孕【官网bztss.com】
标签:beego,err,ctx,限速,limiterCtx,limiter,com,代孕 来源: https://www.cnblogs.com/y7y457yrty/p/12915590.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。