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');
    }
}
相关推荐
不如喫茶去5 分钟前
PHP将图片合成gif动图
php·php生成gif·图片生成gif·合成gif
谷大羽13 分钟前
Kafka Stream实战教程
spring boot·后端·中间件·kafka·stream
前端青山1 小时前
webpack进阶(一)
前端·javascript·webpack·前端框架·node.js
沉默璇年2 小时前
react中Fragment的使用场景
前端·react.js·前端框架
全栈小52 小时前
【PHP】部署和发布PHP网站到IIS服务器
服务器·开发语言·php
饮啦冰美式2 小时前
php如何定位问题
开发语言·php
夜色呦5 小时前
实验室管理自动化:Spring Boot技术的应用
spring boot·自动化·php
夜色呦10 小时前
Spring Boot实验室管理系统:高效科研管理解决方案
数据库·spring boot·php
ac-er888811 小时前
PHP二维数组排序算法函数
算法·php·排序算法
2401_8570262312 小时前
Spring Boot技术在实验室信息管理中的应用
数据库·spring boot·php