欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > webman使用中间件验证指定的控制器及方法[青锐CC]

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

2024/11/18 14:48:24 来源:https://blog.csdn.net/qingruicc/article/details/143743508  浏览:    关键词:webman使用中间件验证指定的控制器及方法[青锐CC]

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

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

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

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

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

一、新建中间件文件

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

<?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",添加后内容如下:

<?phpreturn ['' => [app\middleware\LoginCheck::class]
];

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

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

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

<?phpnamespace 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');}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com