当前位置: 首页 > article >正文

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,
        ];
        
    • 中间件的执行顺序
      • 中间件是按照在管道中的注册顺序来执行的。在请求阶段,它们会按照顺

http://www.kler.cn/a/507303.html

相关文章:

  • 2019-Android-高级面试题总结-从java语言到AIDL使用与原理
  • 深度学习图像算法中的网络架构:Backbone、Neck 和 Head 详解
  • 摄像头模块在狩猎相机中的应用
  • h5使用video播放时关掉vant弹窗视频声音还在后台播放
  • RK3568平台(音频篇)lineout无声调试
  • c#删除文件和目录到回收站
  • 使用 Tailwind CSS 的几点感触
  • 什么是基础镜像
  • 解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题
  • 【Python通过UDP协议传输视频数据】(界面识别)
  • 基于微信小程序的摄影竞赛系统设计与实现(LW+源码+讲解)
  • 蓝桥杯算法|基础笔记(1)
  • 基于JavaFX+Mysql实现的报刊订阅管理系统
  • vite功能之---npm 依赖解析和预构建
  • 力扣解题汇总_JAVA
  • 仿射密码实验——Python实现(完整解析版)
  • 大模型——RAG
  • 设置完端口转发后,本机可以ping通公网设备,但公网设备无法ping通本机内网ip
  • RabbitMQ与Kafka的比较及应用
  • CSS布局与响应式
  • G1原理—G1的GC日志分析解读
  • 二百八十四、Flink——Flink提交任务两种方式(亲测、附截图)
  • 去中心化身份验证:Web3如何确保元宇宙中的身份安全
  • 如何在gitlab cicd中实现每月10号上午执行
  • 我的世界-与门、或门、非门等基本门电路实现
  • 70_Redis数据结构-RedisObject