spiderPolyHandler.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package middleware
  2. import (
  3. . "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
  4. "bp.jydev.jianyu360.cn/BaseService/gateway/core/proxy/filterPoly"
  5. "bp.jydev.jianyu360.cn/BaseService/gateway/core/router"
  6. "fmt"
  7. "github.com/gogf/gf/v2/net/ghttp"
  8. )
  9. var filterPolyManager *filterPoly.Manager
  10. func InitFilterPolyManager() {
  11. filterPolyManager = filterPoly.InitFilterPolyManager()
  12. }
  13. func FilterPolyHandler(r *ghttp.Request) {
  14. ctx := r.GetCtx()
  15. gCtx := router.GetGContext(ctx)
  16. //获取策略
  17. poly := filterPolyManager.GetRule(gCtx.RouterRule.LimitPloy)
  18. status, key := func() (int, string) {
  19. if gCtx.Sess.UserId != "" && poly.Rule.BCheckId { //id请求频率校验
  20. return poly.IdFilter(ctx, gCtx.Sess.UserId)
  21. } else { //ip请求频率校验
  22. return poly.IpFilter(ctx, r.GetClientIp())
  23. }
  24. }()
  25. //是否开启黑名单
  26. if status == -1 { //黑名单 不响应
  27. r.SetError(NewErrorWithCode(OTHER_ERR_OFTEN, fmt.Sprintf("请求频繁限制")))
  28. r.Response.ResponseWriter.WriteHeader(403)
  29. return
  30. }
  31. if status == 2 { //处理验证码逻辑
  32. rData := poly.VerifyHandle(r.Request, key)
  33. r.Response.WriteJsonExit(rData)
  34. return
  35. }
  36. r.Middleware.Next()
  37. }