package utils

import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/context"
"github.com/astaxie/beego/logs"
"github.com/ulule/limiter"
"github.com/ulule/limiter/v3"
"github.com/ulule/limiter/v3/drivers/store/memory"
"net/http"
"strings"
) // RateLimiter this is a struct
type RateLimiter struct {
Limiter *limiter.Limiter
Username string
UserType string
UserToken string
RemainTimes int
MaxTimes int
} func RateLimit(rateLimit *RateLimiter, ctx *context.Context) {
var (
limiterCtx limiter.Context
err error
req = ctx.Request
)
opt := limiter.Options{
IPv4Mask: limiter.DefaultIPv4Mask,
IPv6Mask: limiter.DefaultIPv6Mask,
TrustForwardHeader: false,
}
ip := limiter.GetIP(req, opt) if strings.HasPrefix(ctx.Input.URL(), "/") {
limiterCtx, err = rateLimit.Limiter.Get(req.Context(), ip.String())
} else {
logs.Info("The api request is not track ")
}
if err != nil {
ctx.Abort(http.StatusInternalServerError, err.Error())
return
}
if limiterCtx.Reached {
logs.Debug("Too Many Requests from %s on %s", ip, ctx.Input.URL())
// refer to https://beego.me/docs/mvc/controller/errors.md for error handling
ctx.Abort(http.StatusTooManyRequests, "429")
return
}
} func PanicError(e error) {
if e != nil {
panic(e)
}
} func RunRate() {
// 限制每秒登录的请求次数
theRateLimit := &RateLimiter{}
// 100 reqs/second: "100-S" "100-s"
loginMaxRate := beego.AppConfig.String("total_rule::reqrate")
loginRate, err := limiter.NewRateFromFormatted(loginMaxRate + "-s")
PanicError(err)
theRateLimit.Limiter = limiter.New(memory.NewStore(), loginRate)
beego.InsertFilter("/*", beego.BeforeRouter, func(ctx *context.Context) {
RateLimit(theRateLimit, ctx)
}, true)
}

  在main.go 里面调用方法即可

beego:限制接口访问频率的更多相关文章

  1. Redis 实现接口访问频率限制

    为什么限制访问频率 做服务接口时通常需要用到请求频率限制 Rate limiting,例如限制一个用户1分钟内最多可以范围100次 主要用来保证服务性能和保护数据安全 因为如果不进行限制,服务调用者可 ...

  2. redis 限制接口访问频率

    代码: <?php /** * */ class myRedis { private static $redis = null; /** * @return null|Redis */ publ ...

  3. laravel 5.6 API 接口开发限制接口访问频率

    在laravel 5.6及以上版本中框架中已自带ThrottleRequests,但是为了更好的处理消息,我们可以再新加一个中间件,来更方便的处理相应信息 第一步: php artisan make: ...

  4. WebApi接口访问频率控制的实现

    关于限流的文章,博客园内还是有挺多的.本文做了一个基于Filter限流的例子,算是对WebApiThrottle使用的一个具体的实例. 实现方法: 1.使用Nuget,对WebAPI项目添加WebAp ...

  5. Django REST framework 自定义(认证、权限、访问频率)组件

    本篇随笔在 "Django REST framework 初识" 基础上扩展 一.认证组件 # models.py class Account(models.Model): &qu ...

  6. 从FBV到CBV四(访问频率限制)

    比如我们有一个用户大转盘抽奖的功能,需要规定用户在一个小时内只能抽奖3次,那此时对接口的访问频率限制就显得尤为重要 其实在restframework中已经为我们提供了频率限制的组件 先捋一下请求到AP ...

  7. tp限制访问频率

    作用 通过本中间件可限定用户在一段时间内的访问次数,可用于保护接口防爬防爆破的目的. 安装 composer require topthink/think-throttle 安装后会自动为项目生成 c ...

  8. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 访问频率限制功能实现、防止黑客扫描、防止恶意刷屏

    很多软件组件,大家都能想到了,大家也能做出来,但是成熟稳定.可靠.易用.功能全面,可信任,可相信,可开源就不是很容易,需要树立良好的口碑才可以. 1:往往会有黑客,进行撞库挖掘漏洞,很多系统的账户有可 ...

  9. web系统访问频率限制

    无论是spring mvc还是struts,都可以为controller或者aciton执行前,增加拦截器. 通过拦截器中的逻辑控制,可以实现访问频率的限制. 首先构造访问频率数据类 class Fr ...

随机推荐

  1. [Vscode插件] 自动编译项目中的Sass文件为CSS

    插件名 : Live Sass Compiler 今天在VSCode中发现了一个自动watch项目目录下sass文件的插件,摆脱了在控制台中进行手动watch的繁琐. 安装好以后点击右下角即可自动编译 ...

  2. 大数据除了Hadoop还有哪些常用的工具?

    大数据除了Hadoop还有哪些常用的工具? 1.Hadoop大数据生态平台Hadoop 是一个能够对大量数据进行分布式处理的软件框架.但是 Hadoop 是以一种可靠.高效.可伸缩的方式进行处理的.H ...

  3. vue单元素/组件的过渡

    (1)过渡的类名 v-enter:定义进入过渡的开始状态.在元素被插入之前生效,在元素被插入之后的下一帧移除. v-enter-active:定义进入过渡生效时的状态.在整个进入过渡的阶段中应用,在元 ...

  4. uni-app插件ColorUI步骤条

    1. uni-app插件ColorUI步骤条 1.1. 前言 uni-app就不介绍了,前面几篇已经有所介绍,不知道的可以翻看我前面几篇博客 ColorUI-uniApp是uni-app的一款ui组件 ...

  5. Spring Cache Redis结合遇到的坑

    业务上需要把一些数据放到redis里面,但是系统逻辑代码差不多编写完成了,怎么整?用Spring Cache啊,对既有业务逻辑侵袭极小. 于是尝试调查了一下,遇到一些问题分享一下(本文使用Spring ...

  6. VUE--v-on修饰符

    1.v-on的修饰符 .stop:阻止事件冒泡 <div @click="getTitle"> 阿Q <button @click="getBut&qu ...

  7. Github标星过万,Python新手100天学习计划。

    大数据文摘编辑部出品 作为目前最火也是最实用的编程语言,Python不仅是新手入门程序界的首选,也逐渐成为了从大厂到小厂,招牌需求list的必要一条. 当然,学Python这件事情,你可能也和文摘菌一 ...

  8. 在小程序中实现 Mixins 方案

    摘要: 小程序开发技巧 作者:jrainlau 原文:在小程序中实现 Mixins 方案 Fundebug经授权转载,版权归原作者所有. 在原生开发小程序的过程中,发现有多个页面都使用了几乎完全一样的 ...

  9. 『计算机视觉』imgaug图像增强库中部分API简介

    https://github.com/aleju/imgaug 介绍一下官方demo中用到的几个变换,工程README.md已经给出了API简介,个人觉得不好理解,特此单独记录一下: import n ...

  10. xadmin引入django-ckeditor富文本编辑器

    一.安装: pip install django-ckeditor 安装django-ckeditor库 https://github.com/django-ckeditor/django-ckedi ...