>PHP 프레임워크 >Laravel >Laravel에서 미들웨어를 사용하여 요청 흐름을 제한하는 방법

Laravel에서 미들웨어를 사용하여 요청 흐름을 제한하는 방법

王林
王林원래의
2023-11-03 18:16:47950검색

Laravel에서 미들웨어를 사용하여 요청 흐름을 제한하는 방법

Laravel에서 요청 흐름을 제한하기 위해 미들웨어를 사용하는 방법

소개:
웹 애플리케이션을 개발할 때 우리는 종종 사용자 요청을 제한해야 하는 상황에 직면합니다. 분 특정 요청 수 또는 특정 인터페이스에 대한 동시 요청 수 제한 등 Laravel 프레임워크에서는 미들웨어를 통해 요청 흐름 제한을 구현할 수 있습니다. 이 기사에서는 미들웨어를 사용하여 요청 흐름을 제한하고 해당 코드 예제를 제공하는 방법을 소개합니다.

1. 미들웨어 이해 및 요청 전류 제한
미들웨어는 요청 처리 및 처리, 필터링 또는 향상의 다양한 단계에 개입할 수 있습니다. 요청 제한은 사용자 요청의 빈도나 수를 제한하는 메커니즘으로 일반적으로 리소스의 액세스 속도를 제어하고 서버의 안정성을 보호하는 데 사용됩니다.

2. 조절 미들웨어 생성
Laravel에서는 Artisan 명령을 통해 미들웨어를 생성할 수 있습니다:
php artisan make:middleware ThrottleRequestsphp artisan make:middleware ThrottleRequests

生成的中间件文件位于 app/Http/Middleware 目录下,例如:ThrottleRequests.php
接下来,我们需要在中间件的 handle 方法中实现请求限流的逻辑,例如下面这段代码:

<?php

namespace AppHttpMiddleware;

use Closure;
use IlluminateCacheRateLimiter;
use SymfonyComponentHttpFoundationResponse;

class ThrottleRequests
{
    protected $limiter;

    public function __construct(RateLimiter $limiter)
    {
        $this->limiter = $limiter;
    }

    public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1)
    {
        $key = $request->ip(); // 使用 IP 地址作为限流的关键字
        if ($this->limiter->tooManyAttempts($key, $maxAttempts)) {
            return new Response('Too Many Attempts.', 429);
        }

        $this->limiter->hit($key, $decayMinutes * 60);

        return $next($request);
    }
}

在上述代码中,我们使用了 Laravel 框架内置的 RateLimiter 类来实现请求限流的功能。TooManyAttempts 方法用于判断请求是否超过了最大允许数量,如果是则返回 429 状态码;hit 方法用于记录请求的次数,并设置时间窗口的长度。

三、注册中间件
要使我们创建的中间件生效,需要在 app/Http/Kernel.php 文件中的 $middleware 数组中注册中间件。找到该文件并添加以下代码:

protected $routeMiddleware = [
    // ...
    'throttle' => AppHttpMiddlewareThrottleRequests::class,
];

四、使用中间件进行请求限流
通过以上步骤,我们已经成功创建了一个请求限流的中间件,并完成了中间件的注册。接下来,我们可以在路由定义或者控制器中使用该中间件了。

  1. 在路由定义中使用中间件:

    Route::middleware('throttle:10,1')->get('/test', function () {
     return 'Hello, Laravel!';
    });

    上述代码中,我们将 throttle 中间件应用于 /test 路由,每分钟最多允许 10 次请求,并且在达到最大请求次数后,用户将会收到 429 状态码。

  2. 在控制器中使用中间件:

    class TestController extends Controller
    {
     public function __construct()
     {
         $this->middleware('throttle:10,1');
     }
    
     public function index()
     {
         return 'Hello, Laravel!';
     }
    }

通过以上代码,我们将 throttle 中间件应用于 TestController 控制器中的 index

생성된 미들웨어 파일은 app /Http에 있습니다. /Middleware 디렉터리(예: ThrottleRequests.php).

다음으로 미들웨어의 handle 메소드에서 다음 코드와 같이 요청 전류 제한 논리를 구현해야 합니다.
rrreee

위 코드에서는 내장된 RateLimiter 클래스를 사용하여 요청 속도 제한 기능을 구현합니다. TooManyAttempts 메소드는 요청이 허용되는 최대 개수를 초과하는지 확인하는 데 사용되며, 초과하는 경우 429 상태 코드가 반환됩니다. hit 메소드는 개수를 기록하는 데 사용됩니다. 요청 횟수를 지정하고 기간의 길이를 설정합니다. 🎜🎜3. 미들웨어 등록🎜 우리가 만든 미들웨어를 효과적으로 사용하려면 app/Http/Kernel.php 파일의 $middleware 배열에 미들웨어를 등록해야 합니다. . 파일을 찾아 다음 코드를 추가하세요: 🎜rrreee🎜 4. 요청 전류 제한을 위한 미들웨어 사용 🎜 위 단계를 통해 요청 전류 제한 미들웨어를 성공적으로 생성하고 미들웨어 등록을 완료했습니다. 다음으로 경로 정의나 컨트롤러에서 미들웨어를 사용할 수 있습니다. 🎜
  1. 🎜경로 정의에 미들웨어 사용: 🎜rrreee🎜위 코드에서는 throttle 미들웨어를 매분마다 /test 경로에 적용합니다. 최대 10개의 요청이 허용되며, 최대 요청 수에 도달하면 사용자는 429 상태 코드를 받게 됩니다. 🎜
  2. 🎜컨트롤러에서 미들웨어 사용: 🎜rrreee
🎜위 코드를 사용하여 throttle 미들웨어를 TestController 에 적용합니다. code> <code>index 메서드를 컨트롤러에 추가하세요. 🎜🎜요약: 🎜이 글에서는 Laravel에서 미들웨어를 사용하여 요청 흐름을 제한하는 방법을 소개하고 해당 코드 예제를 제공합니다. 전류 제한 미들웨어를 사용하면 사용자 요청 빈도와 횟수를 유연하게 제어할 수 있어 서버의 안정성과 보안을 보호할 수 있습니다. 실제 웹 개발에서 요청 흐름 제한은 매우 중요한 기술입니다. 이 기사가 모든 사람에게 도움이 되기를 바랍니다. 종료 🎜

위 내용은 Laravel에서 미들웨어를 사용하여 요청 흐름을 제한하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.