미들웨어는 애플리케이션으로 들어온 HTTP 요청을 간편하게 필터링할 수 있는 방법을 제공합니다. 예를 들어, 라라벨은 애플리케이션의 사용자가 인증되었는지 검사하는 미들웨어를 내장하고 있습니다. 만약 인증되지 않은 사용자라면 미들웨어는 그 사용자를 로그인 화면으로 리다이렉트 합니다. 반대로 인증된 사용자라면, 미들웨어는 애플리케이션에서 HTTP 요청이 계속 처리되도록 합니다.
인증 이외에도 다양한 작업을 수행하는 미들웨어를 추가로 작성할 수도 있습니다. CORS 미들웨어는 애플리케이션에서 내보내는 모든 응답에 적절한 헤더들을 추가할 수도 있습니다. 로깅 미들웨어는 애플리케이션으로 들어오는 모든 요청을 기록할 수도 있습니다.
라라벨 프레임워크에는 인증(authentication)과 CSRF 보안을 위한 미들웨어가 포함되어 있습니다. 이러한 미들웨어는 모두 app/Http/Middleware
디렉토리 안에 존재합니다.
새로운 미들웨어를 생성하려면 make:middleware 아티즌 명령을 사용하세요.
php artisan make:middleware CheckAge
이 명령은 app/Http/Middleware 디렉토리 안에 CheckAge 클래스를 생성합니다. 이 미들웨어는 age가 200보다 클 때에만 요청된 주소에 접근할 수 있도록 허용합니다. 그렇지 않은 경우 사용자를 home URI 으로 리다이렉트할 것입니다.
<?php
namespace App\\Http\\Middleware;
use Closure;
class CheckAge
{
/**
* Handle an incoming request.
*
* @param \\Illuminate\\Http\\Request $request
* @param \\Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->age <= 200) {
return redirect('home');
}
return $next($request);
}
}
위 코드에서 볼 수 있듯이, 주어진 age
가 200보다 작거나 같으면 미들웨어는 HTTP 리다이렉트를 클라이언트에게 반환합니다. 그렇지 않다면 HTTP 요청은 (미들웨어를 지나) 애플리케이션 안으로 계속 진행될 것입니다. (미들웨어가 "통과"를 허용하는) HTTP 요청을 애플리케이션 안으로 계속 전달하기 원한다면, $next
콜백함수에 $request
인자를 넣어 호출하면 됩니다.
미들웨어를 HTTP 요청이 애플리케이션에 도달하기 전에 반드시 통과해야 하는 일종의 "단계(layers)"라고 생각하는 것이 가장 좋습니다. 각 단계에서 요청을 검사할 수 있고 요청을 완전히 거절할 수도 있습니다.
{tip} 모든 미들웨어는 서비스 컨테이너를 통해 처리되므로 미들웨어의 생성자에 필요한 모든 의존성을 입력 할 수 있습니다.
애플리케이션이 HTTP 요청을 미들웨어가 처리하기 전에 실행될지 처리한 후에 실행될지는 미들웨어 자신이 결정할 수 있습니다. 예를 들어 다음의 미들웨어는 애플리케이션에서 HTTP 요청이 처리되기 이전 에 실행됩니다.
<?php
namespace App\\Http\\Middleware;
use Closure;
class BeforeMiddleware
{
public function handle($request, Closure $next)
{
// Perform action
return $next($request);
}
}