LaravelのMiddleware Security/Protection

Middlewareを学びます。Middlewareというと何を思い浮かべるでしょうか?
ミドルウェアはその名の通り、OSとアプリケーションの中間にあるソフトウェアという意味です。
フレームワークLaravelでのMiddlewareとはどういう意味でしょうか?そもそもLaravel自体はOSではなく、アプリケーションのソフトウェアです。そのフレームワークにミドルウェアという機能があるのは何か虎に睨まれたようです。では具体的に見ていきましょう。

まず、新規にプロジェクトを立ち上げます
$ php artisan make:auth
$ php artisan migrate

./app/Http/kernel.php

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];

./app/Http/Middleware
Authenticate.php
EncryptCookies.php
RedirectIfAutenticated.php
VerifyCsrfToken.php

Authenticate.php

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->guest()) {
            if ($request->ajax() || $request->wantsJson()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->guest('login');
            }
        }

        return $next($request);
    }

$ php artisan make:middleware RoleMiddleware
Middleware created successfully.

$ php artisan down

Kernel.php

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'role'=>\App\Http\Middleware\RoleMiddleware::class,
    ];

Route

Route::get('/admin/user/roles', ['middleware'=>'role', function(){

	return "Middleware role";
}]);

app/Http/Middleware/RoleMiddleware.php

public function handle($request, Closure $next)
    {
        return redirect('/');

        return $next($request);
    }

/admin/user/roles にアクセスするとリダイレクトされます。