laravel5.2 阅读 1954
laravel5.2-第2章-限制访问次数

laravel5.2-第2章-限制访问次数

2023-06-29 • lulubin

一、实现

修改 app/Http/routes.php

Route::get('/user/{user}', function (\App\User $user) {
   return $user;
})->middleware('throttle:3');

这里的 3 表示一分钟内只允许请求 3 次

修改 app/Providers/RouteServiceProvider.php 的 boot 方法

public function boot(Router $router)
{
   parent::boot($router);
}

使用 curl 进行测试

curl http://localhost:8000/user/10

https://file.lulublog.cn/images/3/2023/06/Y9x6JDIrCI1BBYz4Myiyk49849IKa8.jpg?sign=7751237884c7315d3034eec598797860&t=6acd0400

红色框中

  • X-RateLimit-Limit = 3 表示一分钟内只允许请求 3 次

  • X-RateLimit-Remaining = 2 表示一分钟内剩余请求 2 次

第四次 curl

https://file.lulublog.cn/images/3/2023/06/JnJJ7906zn70L630znPjmJ9j37Jbny.jpg?sign=0640aa90dd304a7c1e953023cab92ea8&t=6acd0400

报错:Too Many Requests。

二、源码

访问 app/Http/Kernel.php,滑倒最后

https://file.lulublog.cn/images/3/2023/06/A48tM10Dn0D8rNTT1dwtR41PUNaPmA.jpg?sign=64255902631760cc32c330cbfcc5b94c&t=6acd0400

点击 \Illuminate\Routing\Middleware\ThrottleRequests 跳转到这里类,查看 hadel 方法

https://file.lulublog.cn/images/3/2023/06/iOOSRg13rVB1Abidog1q6kZOg1k717.jpg?sign=6244229ee590e0b605b4bff22fdb15ea&t=6acd0400

查看方法中的签名:resolveRequestSignature,跳转到 fingerprint 看到签名的方式

https://file.lulublog.cn/images/3/2023/06/q4481I2H888812928N2f2z271Rf588.jpg?sign=f1a464e44899d1ae75fdd3ef278f627a&t=6acd0400

查看 tooManyAttempts:对生成的签名进行缓存了,如果超过限制就会返回 true

https://file.lulublog.cn/images/3/2023/06/M30r37Z3713DNTotoTDRF7Z8IodNNl.jpg?sign=b27b9ce04988e7fc727be2554a4783e7&t=6acd0400

通过 buildResponse 抛出异常

https://file.lulublog.cn/images/3/2023/06/i83i8hsNSPHEef8Fp6sIHw41A6eaP8.jpg?sign=e7456e6f2d692984a2828ea6e2f77f59&t=6acd0400

如果没有超过限制,就会通过 hit 方法加 1

https://file.lulublog.cn/images/3/2023/06/gGuVPU8Wur85PGu3NV62gw22uJGmG9.jpg?sign=bf92017c19b3826dc33d89ee25745a67&t=6acd0400

查看 addHeaders 方法,可以看到 X-RateLimit-Limit 和 X-RateLimit-Remaining

https://file.lulublog.cn/images/3/2023/06/m76I6kDkAhaDudTS8aDo8sHHuI4Idu.jpg?sign=bc5959fc693c70949d3c2f7f6222daeb&t=6acd0400

打赏

×

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开微信扫一扫,即可进行扫码打赏哦