1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package middleware
- import (
- . "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
- "bp.jydev.jianyu360.cn/BaseService/gateway/core/proxy/filterPoly"
- "bp.jydev.jianyu360.cn/BaseService/gateway/core/router"
- "fmt"
- "github.com/gogf/gf/v2/net/ghttp"
- )
- var filterPolyManager *filterPoly.Manager
- func InitFilterPolyManager() {
- filterPolyManager = filterPoly.InitFilterPolyManager()
- }
- func FilterPolyHandler(r *ghttp.Request) {
- ctx := r.GetCtx()
- gCtx := router.GetGContext(ctx)
- //获取策略
- poly := filterPolyManager.GetRule(gCtx.RouterRule.LimitPloy)
- status, key := func() (int, string) {
- if gCtx.Sess.UserId != "" && poly.Rule.BCheckId { //id请求频率校验
- return poly.IdFilter(ctx, gCtx.Sess.UserId)
- } else { //ip请求频率校验
- return poly.IpFilter(ctx, r.GetClientIp())
- }
- }()
- //是否开启黑名单
- if status == -1 { //黑名单 不响应
- r.SetError(NewErrorWithCode(OTHER_ERR_OFTEN, fmt.Sprintf("请求频繁限制")))
- r.Response.ResponseWriter.WriteHeader(403)
- return
- }
- if status == 2 { //处理验证码逻辑
- rData := poly.VerifyHandle(r.Request, key)
- r.Response.WriteJsonExit(rData)
- return
- }
- r.Middleware.Next()
- }
|