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() }