zoukankan      html  css  js  c++  java
  • 接口访问限制

    1.限制接口访问频率

    package main
    
    import (
    	"github.com/labstack/echo"
    	"github.com/labstack/echo/middleware"
    	"golang.org/x/time/rate"
    )
    
    type (
    	RateLimitConfig struct {
    		// Skipper defines a function to skip middleware.
    		Skipper middleware.Skipper
    		Limit   int
    		Burst   int
    	}
    )
    
    var DefaultRateLimitConfig = RateLimitConfig{
    	Skipper: middleware.DefaultSkipper,
    	Limit:   2,
    	Burst:   1,
    }
    
    func RateLimitMiddleware() echo.MiddlewareFunc {
    	return RateLimitWithConfig(DefaultRateLimitConfig)
    }
    
    func RateLimitWithConfig(config RateLimitConfig) echo.MiddlewareFunc {
    	// Defaults
    	if config.Skipper == nil {
    		config.Skipper = DefaultRateLimitConfig.Skipper
    	}
    	var limiter = rate.NewLimiter(rate.Limit(config.Limit), config.Burst)
    	return func(next echo.HandlerFunc) echo.HandlerFunc {
    		return func(c echo.Context) error {
    			if config.Skipper(c) {
    				return next(c)
    			}
    			if limiter.Allow() == false {
    				return echo.ErrTooManyRequests
    			}
    			return next(c)
    		}
    	}
    }
    

    2.请求体大小限制

    BodyLimit 中间件用于设置允许的请求体的最大长度,如果请求体的大小超过了该值,则返回”413 - Request Entity Too Large”响应。
    这个限制的判断取决于请求头的 Content-Length 和实际读取到的请求体内容两方面,尽可能的保证安全。

    限制可以指定 4x 或者 4xB,x是”K, M, G, T, P”中的一个

    e := echo.New()
    e.Use(middleware.BodyLimit("2M"))
    

    自定义配置

    e := echo.New()
    e.Use(middleware.BodyLimitWithConfig(middleware.BodyLimitConfig{}))
    
    // 配置
    BodyLimitConfig struct {
      // Skipper 定义了一个跳过中间间的函数
      Skipper Skipper
      // 请求体被允许的最大值,可以被指定为类似“4x”和“4xB”这样的值,
      // x 是 K,M,G,T,P 中的一个。
      Limit string `json:"limit"`
    }
    
    // 默认配置
    DefaultBodyLimitConfig = BodyLimitConfig{
      Skipper: defaultSkipper,
    }
    

    相关链接

    beego限制接口访问频率
    echo限制接口访问频率
    访问频率
    github-tollbooth
    请求体限制

  • 相关阅读:
    Java事务
    Mybatis二级缓存问题
    183.面试题 17.14. 最小K个数(快速排序)
    182. 跟着三叶学最短路径问题(存图方式)
    181. 差分数组学习
    AI大视觉(二十) | 小目标检测的tricks汇总
    CentOS7 上安装 mysql-5.7.26
    如何欺骗 Go Mod?
    .netcore docker常用命令-持续补充
    转载:登录后,用户配置被修改的处理方法
  • 原文地址:https://www.cnblogs.com/tomtellyou/p/14108250.html
Copyright © 2011-2022 走看看