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');
    }
}
相关推荐
从零开始的ops生活32 分钟前
【Day 80】Linux-NAS 和 SAN 存储
linux·运维·php
shizhenshide33 分钟前
为什么有时候 reCAPTCHA 通过率偏低,常见原因有哪些
开发语言·php·验证码·captcha·recaptcha·ezcaptcha
偶尔贪玩的骑士11 小时前
Kioptrix Level 1渗透测试
linux·开发语言·网络安全·php
迎風吹頭髮12 小时前
Linux服务器编程实践58-getnameinfo函数:通过socket地址获取主机名与服务名
开发语言·数据库·php
歪歪10013 小时前
React Native开发Android&IOS流程完整指南
android·开发语言·前端·react native·ios·前端框架
知识分享小能手13 小时前
uni-app 入门学习教程,从入门到精通,uni-app组件 —— 知识点详解与实战案例(4)
前端·javascript·学习·微信小程序·小程序·前端框架·uni-app
探索宇宙真理.13 小时前
WordPress Flex QR Code Generator文件上传 | CVE-2025-10041 复现&研究
经验分享·php·安全漏洞
lapiii35814 小时前
快速学完React计划(第一天)
前端·react.js·前端框架
PFinal社区_南丞14 小时前
构建可维护的正则表达式系统-pfinal-regex-center设计与实现
后端·php
小白要努力sgy14 小时前
待学习--中间件
学习·中间件