webman使用中间件验证指定的控制器及方法[青锐CC]

因为webman官方文档没有中间件验证指定的控制器的例子,写了一个小例子。

webman使用中间件验证指定的控制器及方法很简单,只需要三部:

1、新建一个中间件文件。

2、配置文件添加全局中间件。

3、指定的控制器中设置不需要验证的方法。

一、新建中间件文件

在"app\middleware"目录下新建文件"LoginCheck.php",主要内容是获取到请求的控制器类名和方法名,echo输出只是测试用,使用的时候注释或者删除,内容如下:

php 复制代码
<?php
#验证登录
namespace app\middleware;

use ReflectionClass;
use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;

class LoginCheck implements MiddlewareInterface
{
    public function process(Request $request, callable $handler): Response
    {
        $controller = $request->controller; //控制器类名
        $action = $request->action;         //控制器方法
        echo "控制器:".$controller."\n";
        echo "方法:".$action."\n";
        if(in_array($controller,["app\controller\AdminController"])){  //在数组中添加需要验证的控制器类名
            echo "控制器需要验证\n";
            $reflection = new ReflectionClass($controller);             //创建控制器类的反射
            $noNeedCheckArr = $reflection->getDefaultProperties()['noNeedCheckArr'] ?? [];     //获得控制器类中的noNeedCheck方法,如果不存在设置为空数组
            if (!in_array($action, $noNeedCheckArr)) {  //需要检查
                echo "方法需要验证\n";
                $admin = session('admin',"");   //如果名为admin的sessin不存在则赋值为""
                if ($admin!="") {  //如果不等于空字符串说明已经登录,请求继续向洋葱芯穿越
                    echo "已登录,继续\n";
                    return $handler($request);
                }else{  //为空字符串说明没登录
                    echo "未登录,重定向登录页\n";
                    return redirect('/admin/login');
                }
            }else{  //此方法不需要验证,请求继续向洋葱芯穿越
                echo "方法不需要验证\n";
                return $handler($request);
            }
        }else{  //控制器不需要验证,请求继续向洋葱芯穿越
            echo "控制器不需要验证\n";
            return $handler($request);
        }
    }
}

二、配置文件添加全局中间件

配置文件为"config/middleware.php",添加后内容如下:

php 复制代码
<?php

return [
	'' => [
        app\middleware\LoginCheck::class
    ]
];

三、指定的控制器中设置不验证的方法

中间件文件中指定验证的控制器为"app\controller\AdminController",它的文件是"app\controller"目录下的"AdminController.php"

如果想要验证所有的方法,不需要添加"noNeedCheckArr"

php 复制代码
<?php

namespace app\controller;

use support\Request;
use support\Response;
use support\View;

class AdminController
{
    protected $noNeedCheckArr = ['login','captcha'];    //登录、验证码的方法不需要验证

    public function index(Request $request)
    {
        View::assign([
            'name1' => 'value1',
            'name2'=> 'value2',
        ]);
        return view('admin/index');
    }
    public function login(Request $request){
        return view('admin/login');
    }
}
相关推荐
hunterandroid18 小时前
HarmonyOS 长列表滚动性能优化:预渲染、离屏缓存与 GPU 合成策略
华为·前端框架
IM架构师20 小时前
# 一次老旧PHPCMS网站入侵排查:从SQL注入到PHP后门,以及IP白名单止血
sql·tcp/ip·php
码途行者21 小时前
处理超时未支付订单:两套轻量化方案,附 PHP 极简实现
开发语言·redis·php
vx_Biye_Design21 小时前
PHP中医养生馆预约系统60841-计算机课程设计、毕业设计
vue.js·spring boot·后端·mysql·php·课程设计·express
.Bryce.1 天前
你了解 Blackboard(黑板系统)吗?听说过基于黑板系统实现的智能体吗?
java·网络·gpt·php·agent·codex·黑板系统
yu_zhidun1 天前
企业电脑监控软件怎么选:别只看功能清单,先看这 6 个底层能力
开发语言·电脑·php·域智盾系统
李纲明1 天前
WordPress 白屏排查手册:关插件、换主题、开调试、查 PHP(附停手信号)
开发语言·php·wordpress·故障排查·白屏·插件冲突
天远API1 天前
零信任架构实战:基于天远公安二要素政务版构建自动化不动产交易与契税核算实名核实网关
人工智能·架构·自动化·php
WeiXin_DZbishe2 天前
基于springboot装修风格选择系统的设计与开发-计算机毕设【课程设计】77964
java·vue.js·spring boot·后端·python·php·课程设计
anew___2 天前
《从零手写操作系统 (49):虚拟内存进阶——Demand Paging、Swap与缺页异常处理》
linux·服务器·php