- 负责对请求进行身份验证;
- 检查并限制请求的访问频率;
- 维护会话状态;
- 根据请求中的Header信息,设置对应的响应Header等。
- 中间件类
<?PHP namespace AppHttpMiddleware; use Closure; use IlluminateHttpRequest; class MyMiddleware { /** * Handle an incoming request. * * @param IlluminateHttpRequest $request * @param Closure $next * @return mixed */ public function handle(Request $request, Closure $next) { // 判断当前请求是否携带token if (!$request->header('Authorization')) { return response()->json(['message' => 'Unauthorized'], 401); } // 执行下一个中间件或应用程序 return $next($request); } }@H_502_0@上述代码中,我们定义了一个名为MyMiddleware的中间件类,它判断请求是否携带Authorization头部信息,如果未携带,则返回未授权的响应;如果已携带,则执行下一个中间件或应用程序。
- 中间件调用
// app/Http/Kernel.PHP protected $middleware = [ AppHttpMiddlewareMyMiddleware::class, ];
// routes/web.PHP use AppHttpMiddlewareMyMiddleware; Route::get('/user', function () { // })->middleware(MyMiddleware::class);@H_502_0@除此之外,还可以通过中间件组(Middleware Groups)的方式批量引入多个中间件,以此为基础,灵活应用中间件,在不同的场景下实现不同的功能。 @H_502_0@三、中间件执行流程 @H_502_0@在请求进入Laravel应用程序时,Laravel框架按照中间件的引入顺序调用这些中间件类,然后执行它们的process方法。由于中间件链的组成,可以轻松地在请求被处理之前或之后进行操作。 @H_502_0@Laravel框架的中间件调度流程如下:
- 请求进入应用,经过HttpKernel中间件处理,创建请求对象(IlluminateHttpRequest实例)。
- 调用全局中间件,如果有最先的中间件需要执行,则执行该中间件的process方法。
- 接着调用路由中间件,如果有最先的中间件需要执行,则执行该中间件的process方法。
- 请求最终到达路由闭包函数或控制器方法,完成具体的业务逻辑处理。
- 经由路由中间件的process方法返回到HttpKernel中间件,按相反的顺序调用路由中间件和全局中间件的terminate方法。
- 最终生成HTTP响应,返回给浏览器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。