Lumen访问频率限制

composer require dingo/api:1.0.x@dev

在App\Http\Middleware下新建文件RateLimits.php写入内容

<?php
namespace App\Http\Middleware;


use Carbon\Carbon;
use Illuminate\Http\Response;
use Illuminate\Routing\Middleware\ThrottleRequests;

class RateLimits extends ThrottleRequests
{
    protected function resolveRequestSignature($request)
    {
    //用户唯一性通过方法、路径、ip、用户token通过sha1方式加密
        return sha1(implode('|', [
                $request->method(),
                $request->root(),
                $request->path(),
                $request->ip(),
                $request->header('X-Access-Token')
            ]
        ));
    }

    protected function buildResponse($key, $maxAttempts)
    {
      //超时返回429
        $response = new Response('Too frequent access.', 429);
        $retryAfter = $this->limiter->availableIn($key);
        return $this->addHeaders(
            $response, $maxAttempts,
            $this->calculateRemainingAttempts($key, $maxAttempts, $retryAfter,1),
            $retryAfter
        );
    }
}

在app.php中routeMiddleware数组中加入

 'throttle' => App\Http\Middleware\RateLimits::class,

在路由中加入,意思是每2分钟内只能访问10次,比如在1:00:00访问,在1:02:00之内只能访问10次,无论达到次数没有在1:02:00后会重写计数,也就是说达到次数后在X-RateLimit-Reset记录的时间戳之前不能访问

'middleware' => ['authAdmin','throttle:10,2']

开启后会回传三个响应头: X-RateLimit-Limit, X-RateLimit-Remaining和 X-RateLimit-Reset(如果达到限制次数)。

 X-RateLimit-Limit:在指定时间内允许的最大请求次数
 X-RateLimit-Remaining:在指定时间段内剩下的请求次数
:X-RateLimit-Reset:达到访问次数后距离下一次访问的时间戳
image.png

在缓存中可以看到保存用户达到访问次数后距离下一次访问的时间戳


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,838评论 5 116
  • 文章图片上传不正常,如需文档,可联系微信:1017429387 目录 1 安装... 4 1.1 配置探针... ...
    Mrhappy_a7eb阅读 6,396评论 0 5
  • Overview The ccxt library is a collection of available cr...
    郭蝈儿蝈儿阅读 3,788评论 0 1
  • 定位当前目录 cmd: shell: 批量改文件内容 shell: 端口号占用查询 cmd: 文件夹内查找文本 s...
    slords阅读 826评论 0 1
  • 各位读者们,大家好!今天我要跟大家分享的是厦门之旅的行程和感受,希望对大家有所参考和帮助。 厦门,隶属...
    幸福晴天阅读 661评论 0 1