欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

限制ip访问频率

new课堂
克隆/下载 
 
 
 
 ThrottleRequestByIP.php 1.38 KB → Peter Q Peter Q 提交于 4月前 . 加入git版本控制
 

<?php
 
namespace App\Http\Middleware;
 
use Closure;
use Illuminate\Routing\Middleware\ThrottleRequests;
use Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException;
 
class ThrottleRequestByIP extends ThrottleRequests
{
 
 
/**
* @param \Illuminate\Http\Request $request
* @param Closure $next
* @param int $maxAttempts
* @param int $decayMinutes
* @param int $LockMinutes
* @return \Illuminate\Http\Response
*/
public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1, $LockMinutes = 0)
{
$key = $this->resolveRequestSignature($request);
 
if(!$LockMinutes)$LockMinutes = $decayMinutes;
if ($this->limiter->tooManyAttempts($key, $maxAttempts, $LockMinutes)) {
throw new TooManyRequestsHttpException($this->limiter->availableIn($key),'该ip请求频繁,已被锁定,请在'.$this->limiter->availableIn($key).'秒后重试');
}
 
$this->limiter->hit($key, $decayMinutes);
 
$response = $next($request);
 
return $this->addHeaders(
$response, $maxAttempts,
$this->calculateRemainingAttempts($key, $maxAttempts)
);
}
 
 
 
/**
* Resolve request signature.
*
* @param \Illuminate\Http\Request $request
* @return string
*/
protected function resolveRequestSignature($request)
{
return 'ThrottleIP|'.$request->ip();
}
}
来自  https://git.oschina.net/peterq/nkt/blob/master/app/Http/Middleware/ThrottleRequestByIP.php
普通分类: