Laravel 路由中间件详解与实践

阅读:47 2025-03-25

什么是 Laravel 中间件?

Laravel 中间件(Middleware)是应用 HTTP 请求和响应时的过滤器,它能够在请求到达路由或控制器之前,或在响应发送到客户端之前执行特定的逻辑。常见的应用场景包括用户身份验证、CORS 处理、日志记录等。

Laravel 默认提供的中间件

Laravel 自带了一些常用的中间件,位于 app/Http/Middleware 目录中。例如:

  • Authenticate:用户身份验证。

  • CheckForMaintenanceMode:检查应用是否处于维护模式。

  • TrimStrings:自动去除请求中的空格。

  • VerifyCsrfToken:验证 CSRF 令牌,防止跨站请求伪造攻击。

这些中间件可以在 app/Http/Kernel.php 文件中找到,并被默认应用到全局或某些特定路由组。

如何创建自定义中间件?

Laravel 允许开发者创建自定义中间件,以实现特定的业务逻辑。可以使用 Artisan 命令快速创建:

php artisan make:middleware CheckUserRole

此命令将在 app/Http/Middleware 目录下生成一个 CheckUserRole.php 文件。

自定义中间件示例

以下是一个检查用户角色的自定义中间件示例:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class CheckUserRole
{
    public function handle(Request $request, Closure $next, $role)
    {
        if (!$request->user() || !$request->user()->hasRole($role)) {
            return response()->json(['message' => 'Unauthorized'], 403);
        }
        return $next($request);
    }
}

handle 方法中,$role 作为参数传入,并用于判断当前用户是否具有特定权限。

如何在 Laravel 路由中使用中间件?

全局中间件

如果希望某个中间件对整个应用生效,可以将其添加到 app/Http/Kernel.php 文件的 $middleware 数组中。

protected $middleware = [
    \App\Http\Middleware\CheckUserRole::class,
];

指定路由使用中间件

可以在 routes/web.phproutes/api.php 中为特定路由分配中间件:

Route::get('/admin', function () {
    return view('admin.dashboard');
})->middleware('auth');

如果是带参数的中间件,可以这样使用:

Route::get('/admin', function () {
    return view('admin.dashboard');
})->middleware('role:admin');

在控制器中使用中间件

在控制器的构造函数中也可以应用中间件:

class AdminController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('role:admin');
    }
}

结论

Laravel 中间件为应用提供了强大的请求过滤和拦截机制,使开发者可以轻松地管理身份验证、访问控制、日志记录等功能。通过学习 Laravel 官方文档并实践自定义中间件,你可以更加灵活地控制 HTTP 请求的处理流程。


标签: Laravel
声明

1、部分文章来源于网络,仅作为参考。
2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!