diff --git a/apps/system/api/user.go b/apps/system/api/user.go index 8d4a85b..8ef013b 100644 --- a/apps/system/api/user.go +++ b/apps/system/api/user.go @@ -342,7 +342,7 @@ func (u *UserApi) InsertSysUser(rc *ctx.ReqCtx) { // @Tags 用户 // @Accept application/json // @Product application/json -// @Param data body entity.SysUser true "用户数据" +// @Param data body entity.SysUser true "用户数据"g // @Success 200 {string} string "{"code": 200, "message": "添加成功"}" // @Success 200 {string} string "{"code": 400, "message": "添加失败"}" // @Router /system/user/sysUser [put] diff --git a/base/config/server.go b/base/config/server.go index 0e27b80..be9b05d 100644 --- a/base/config/server.go +++ b/base/config/server.go @@ -6,6 +6,7 @@ type Server struct { Port int `yaml:"port"` Model string `yaml:"model"` Cors bool `yaml:"cors"` + Rate *Rate `yaml:"rate"` IsInitTable bool `yaml:"isInitTable"` DbType string `yaml:"db-type"` ExcelDir string `yaml:"excel-dir"` @@ -33,3 +34,8 @@ type Tls struct { KeyFile string `yaml:"key-file"` // 私钥文件路径 CertFile string `yaml:"cert-file"` // 证书文件路径 } + +type Rate struct { + IsRate bool `yaml:"is-rate"` // 是否限流 + RateNum float64 `yaml:"rate-num"` // 限流数量 +} diff --git a/config.yml b/config.yml index ea82029..47c6817 100644 --- a/config.yml +++ b/config.yml @@ -7,6 +7,9 @@ server: model: release port: 7788 cors: true + rate: + is-rate: true + rate-num: 100 db-type: mysql isInitTable: false excel-dir: ./resource/excel/ @@ -37,7 +40,7 @@ redis: port: 6379 mysql: - host: 127.0.0.1:3306 + host: 47.104.252.2:3306 username: pandax password: pandax db-name: pandax diff --git a/go.mod b/go.mod index fe5ad2e..9e65d30 100644 --- a/go.mod +++ b/go.mod @@ -19,6 +19,7 @@ require ( github.com/casbin/casbin/v2 v2.37.4 github.com/casbin/gorm-adapter/v3 v3.4.6 github.com/dgrijalva/jwt-go v3.2.0+incompatible + github.com/didip/tollbooth v4.0.2+incompatible // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/uuid v1.3.0 github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible // indirect @@ -29,6 +30,7 @@ require ( github.com/mojocn/base64Captcha v1.3.5 github.com/mssola/user_agent v0.5.3 github.com/onsi/ginkgo v1.16.4 // indirect + github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pkg/errors v0.8.1 github.com/qiniu/go-sdk/v7 v7.11.0 github.com/robfig/cron/v3 v3.0.1 diff --git a/go.sum b/go.sum index 12252d8..d7f4b18 100644 --- a/go.sum +++ b/go.sum @@ -40,6 +40,8 @@ github.com/denisenkom/go-mssqldb v0.11.0 h1:9rHa233rhdOyrz2GcP9NM+gi2psgJZ4GWDpL github.com/denisenkom/go-mssqldb v0.11.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/didip/tollbooth v4.0.2+incompatible h1:fVSa33JzSz0hoh2NxpwZtksAzAgd7zjmGO20HCZtF4M= +github.com/didip/tollbooth v4.0.2+incompatible/go.mod h1:A9b0665CE6l1KmzpDws2++elm/CsuWBMa5Jv4WY0PEY= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -254,6 +256,8 @@ github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJ github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= github.com/otiai10/mint v1.3.3/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/initialize/router.go b/initialize/router.go index b11cd3d..add0040 100644 --- a/initialize/router.go +++ b/initialize/router.go @@ -51,6 +51,10 @@ func InitRouter() *gin.Engine { if serverConfig.Cors { router.Use(middleware.Cors()) } + // 流量限制 + if serverConfig.Rate.IsRate { + router.Use(middleware.Rate()) + } // api接口 router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) // 设置路由组 diff --git a/middleware/rate.go b/middleware/rate.go new file mode 100644 index 0000000..8a2f2ac --- /dev/null +++ b/middleware/rate.go @@ -0,0 +1,28 @@ +package middleware + +import ( + "github.com/didip/tollbooth" + "github.com/gin-gonic/gin" + "pandax/base/config" +) + +/** + * @Description 添加qq群467890197 交流学习 + * @Author 熊猫 + * @Date 2022/1/19 8:28 + **/ + +//限流中间件 +func Rate() gin.HandlerFunc { + lmt := tollbooth.NewLimiter(config.Conf.Server.Rate.RateNum, nil) + lmt.SetMessage("已经超出接口请求限制,稍后再试.") + return func(c *gin.Context) { + httpError := tollbooth.LimitByRequest(lmt, c.Writer, c.Request) + if httpError != nil { + c.Data(httpError.StatusCode, lmt.GetMessageContentType(), []byte(httpError.Message)) + c.Abort() + } else { + c.Next() + } + } +}