接口访问限制

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请求体限制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值