thinkphp全局中间件

该代码段展示了一个处理HTTP请求的中间件,主要功能是进行JWT(JSON Web Token)验证。首先尝试从请求中获取token,然后通过JWT库验证token的有效性。如果token无效或未提供,返回错误信息;否则,允许请求继续执行。这个中间件还实现了后置处理,检查访问路径是否在预定义的白名单内,如果不在,则进行token验证。此中间件确保了只有持有有效token的用户才能访问特定资源。

public function handle($request, \Closure $next)
    {
        //路由中间件
//        $token = JWT::getRequestToken();
//
//        $key = JWT::verifyjwt($token)->getData();
//
//        if ($key['code'] !== 200) {
//            return fail('非法请求');
//        }
//        return $next($request);

        //全局中间件,后置
        $res = $next($request);
        //判断当前访问路径是否在定义的当中
        if (!in_array($request->pathinfo(), $this->arr)) {
            //获取token值
            $token = JWT::getRequestToken();
            try {
                //验证token
                JWT::verifyjwt($token)->getData();
            }catch (Exception $exception){
                return fail($exception->getMessage());
            }
        }
        //放行
        return $res;


    }

ThinkPHP 中间件的工作原理和实现机制是其框架灵活性与可扩展性的重要体现。中间件本质上是一个请求与响应之间的处理层,允许开发者在请求到达控制器之前或响应发送之前执行特定逻辑。这一机制特别适用于权限验证、日志记录、CORS 处理等通用任务。 ### 中间件的加载与注册 在 ThinkPHP6 中,中间件的加载通常通过 `app/middleware.php` 文件完成,该文件用于导入全局中间件[^3]。框架通过以下代码将中间件注册到应用实例中: ```php $this->app->middleware->import(include $this->app->getBasePath() . 'middleware.php'); ``` 上述代码会加载 `middleware.php` 文件中定义的中间件,并将其导入到应用的中间件栈中[^4]。 ### 中间件的执行流程 中间件的执行分为**前置中间件**和**后置中间件**两种形式。前置中间件通常用于在请求到达控制器之前进行预处理,例如身份验证或请求过滤。后置中间件则用于在响应生成之后、发送给客户端之前进行后处理,例如添加响应头或记录日志。 以下是一个典型的前置中间件示例: ```php class Check { public function handle($request, \Closure $next) { if (true) { return json('middle'); } return $next($request); } } ``` 如果条件满足(例如验证失败),该中间件可以提前返回响应;否则,调用 `$next($request)` 将请求传递给下一个中间件或控制器[^5]。 对于后置中间件,逻辑稍有不同: ```php class Logging { public function handle($request, \Closure $next) { $response = $next($request); if (true) { return json('middle'); } return $response; } } ``` 该中间件会在请求处理完成后对响应进行修改或记录[^5]。 ### 中间件的绑定与优先级 中间件可以绑定到特定的路由或作为全局中间件使用。例如,以下代码将 `Check` 和 `Auth` 中间件绑定到 `login` 路由: ```php Route::rule('login', 'api/v1.Login/getLinkData')->middleware(['check', 'auth']); ``` 中间件的执行顺序遵循定义的顺序,`check` 会优先于 `auth` 执行[^5]。 ### 中间件的设计哲学 从设计角度来看,中间件的实现体现了 ThinkPHP 的模块化与可插拔特性。中间件机制简化了业务逻辑与框架核心的耦合,使得开发者可以专注于功能实现而不必修改框架核心代码[^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值