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

embedded/2024/11/17 23:06:24/

因为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"><?phpreturn ['' => [app\middleware\LoginCheck::class]
];

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

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

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

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


http://www.ppmy.cn/embedded/138375.html

相关文章

小白如何快速上手python爬虫?

对于Python爬虫的小白学习路线&#xff0c;可以按照以下步骤进行&#xff1a; python爬虫课程资料&#xff1a; https://kakatu.top/m?sdata Python基础&#xff1a;首先&#xff0c;需要掌握Python的基本语法&#xff0c;包括变量、数据类型、控制流&#xff08;if/for/whil…

除了 TON, 哪些公链在争夺 Telegram 用户?数据表现如何?

作者&#xff1a;Stella L (stellafootprint.network) 在 2024 年&#xff0c;区块链游戏大规模采用迎来了一个意想不到的催化剂&#xff1a;Telegram。随着各大公链争相布局这个拥有海量用户基础的即时通讯平台&#xff0c;一个核心问题浮出水面&#xff1a;这种用户获取策略…

docker构建jdk11

# 建立一个新的镜像文件&#xff0c;配置模板&#xff1a;新建立的镜像是以centos为基础模板 # 因为jdk必须运行在操作系统之上 FROM centos:7.9.2009# 作者名 MAINTAINER yuanhang# 创建一个新目录来存储jdk文件 RUN mkdir /usr/local/java#将jdk压缩文件复制到镜像中&#…

MySQL基础(初阶+进阶)(详解)

前言&#xff1a; MySQL基础的操作还有很多&#xff0c;上一次主要是针对MySQL的库的增删查的相关操作&#xff0c;接下来就来探究一下MySQL中表的更多的操作。主要围绕着MySQL中表增删查改的操作进行探究&#xff01; 表的操作&#xff1a; 在进行对表的操作的时候&#xff0…

Redis增删改查、复杂查询案例分析

Redis 基本操作&#xff08;增删改查&#xff09; 插入&#xff08;增&#xff09;操作 字符串&#xff08;String&#xff09;类型插入&#xff1a;在 Redis 中&#xff0c;使用SET命令插入一个字符串类型的键值对。例如&#xff0c;SET user:name "John"&#xff0…

【算法一周目】双指针(2)

目录 有效三角形的个数 解题思路 C代码实现 和为s的两个数字 解题思路 C代码实现 三数之和 解题思路 C代码实现 四数之和 解题思路 C代码实现 有效三角形的个数 题目链接&#xff1a;611. 有效三角形的个数题目描述&#xff1a;给定一个包含非负整数的数组nums&…

SpringBoot 应用出错 Comparison method violates its general contract!

出现此错误的大致环境如下 SpringBoot 2.7.17, SpringWeb 项目&#xff0c;所引用入的 spring-webmvc-5.3.30, spring 6 已解决JDK 1.8 或 JDK 17依赖了 jackson-dataformat-xml:2.12.6 和 jackson-dataformat-cbor:2.12.6, 它会在 RestTemplate 加上 application/xml, applic…

​‌华为交换机在Spine-Leaf架构中的使用场景​

‌华为交换机在Spine-Leaf架构中的使用场景主要包括数据中心网络设计。‌ 在数据中心网络设计中&#xff0c;Spine-Leaf架构是一种常见的网络架构&#xff0c;由Spine层和Leaf层组成。Spine层负责提供高带宽的连接&#xff0c;而Leaf层则负责连接到服务器和设备。华为交换机在…