Bootstrap

laravel10.x 框架中间件实现原理

  1. 中间件概念简介
    • 在Laravel 10.x中,中间件是一种在请求到达路由处理程序之前或者之后执行的代码。它就像一个关卡,可以检查、过滤或者修改进入应用程序的HTTP请求。中间件可以用于很多场景,比如身份验证(检查用户是否登录)、日志记录(记录请求信息)、CORS(跨域资源共享)设置等。
  2. 中间件的实现原理 - 基于管道(Pipeline)模式
    • 请求处理流程
      • 当一个HTTP请求进入Laravel应用程序时,它会首先进入路由系统。在路由被解析和执行之前,请求会通过一系列的中间件。这些中间件组成了一个管道,请求就像一个“数据球”在这个管道中传递。
      • 例如,假设有一个简单的Web应用程序,有一个用于显示用户信息的路由/user/profile,在访问这个路由之前,可能会有一个身份验证中间件来检查用户是否登录。
    • 中间件的定义和注册
      • 定义中间件:在Laravel中,中间件是一个类。通常,这个类会有一个handle方法。例如,一个简单的身份验证中间件可能如下所示:
        <?php
        namespace App\Http\Middleware;
        use Closure;
        use Illuminate\Http\Request;
        class Authenticate
        {
                 
            public function handle(Request $request, Closure $next)
            {
                 
                if (!auth()->check()) {
                 
                    return redirect('login');
                }
                return $next($request);
            }
        }
        
        • 在这个handle方法中,首先检查用户是否通过认证(auth()->check())。如果没有认证,就将用户重定向到登录页面。如果用户已经认证,就调用$next($request),这个$next是一个闭包,它允许请求继续在管道中传递到下一个中间件或者最终的路由处理程序。
      • 注册中间件:定义好中间件后,需要将其注册到应用程序中。可以在app/Http/Kernel.php文件中进行注册。在这个文件中,有$middleware$routeMiddleware两个属性。$middleware数组中的中间件会应用到所有的HTTP请求,而$routeMiddleware数组中的中间件可以根据路由的需要进行选择性应用。
        • 例如,将上面定义的Authenticate中间件注册到$routeMiddleware中可以这样做:
        protected $routeMiddleware = [
            'auth' => \App\Http\Middleware\Authenticate::class,
        ];
        
    • 中间件的执行顺序
      • 中间件是按照在管道中的注册顺序来执行的。在请求阶段,它们会按照顺
;