laravel11: 给接口增加签名验证

一,添加controller/中间件/路由

1,添加中间件

liuhongdi@lhdpc:/data/site/gsapi$ php artisan make:middleware ApiSignINFO  Middleware [app/Http/Middleware/ApiSign.php] created successfully. 

2,添加路由:

在routes/api.php文件中

Route::controller(VirtualController::class)->group(function () {Route::get('/virtual/info', 'info')->middleware([ApiSign::class]);
});

二,代码

1,中间件:

<?phpnamespace App\Http\Middleware;use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use App\extend\result\Result;class ApiSign
{/*** Handle an incoming request.** @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next*/public function handle(Request $request, Closure $next): Response{$post_data = $request->all();if (!$this->getSign($post_data)) {return Result::ErrorCode(1,'接口签名验证错误');} else {return $next($request);}}private function getSign(array $params): bool{//从配置文件中得到secret$app_secret = config("client.my_secret");if (empty($params)) {return false;}if (!isset($params['sign'])) {return false;}$sign = $params['sign'];unset($params['sign']);ksort($params);$strParams = [];foreach ($params as $k => $v) {if (preg_match('/\/\S+\/\S+/', $k) != 0 || preg_match('/\S+\/\S+/', $k) != 0) {continue;}$strParams[] = "$k_$v";}$inputStr = implode('&', $strParams)."&secret_".$app_secret;$creSign = md5($inputStr);return $creSign !== $sign  ? false : true ;}}

 

2,controller:

class VirtualController extends Controller
{//测试接口签名验证public function info(Request $request) {$data = ['name'=>'老张'];return Result::Success($data);}
}

 

三,测试效果

用postman提交参数:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/745327.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Slimes

这个看官方题解就好了,解释一下官方题解 首先一个很大的前提(也比较显然),就是为了达到最优的情况,我们只会让一个史莱姆一直吃,而不会让两个史莱姆都吃,最后再让其中一个史莱姆将另一个史莱姆吃掉这一个区间指的是,只有这个区间的史莱姆进行互相吃,相当于忽略了区间外…

大屏可视化看板变形问题和分辨率问题的解决办法

关于大屏可视化,好看的画面总是千篇一律,但是遇到的问题,可谓是五花八门,就比如画面变形问题,模糊问题。做一个可视化画面,电脑上显示好好的↓ 实际投出来↓ 画面拉长了压扁了扭曲变形…… 回到电脑上一顿调,没啥用,还是变形…… 那种无力感,经历过画面工程师懂的都…

cerebro 报错: Oops, cannot start the server. com.google.common.util.concurrent.UncheckedExecutionExcep

@目录前言环境异常修改方案第二次报错修改方式成功 前言 使用 elasticsearch + springboot 实现新闻搜索功能: https://javapub.net.cn/star/project/news-search-es/ 遇到的错误记录。 环境cerebro 下载地址: https://github.com/lmenezes/cerebro使用了最新的版本: cerebr…

manim边学边做--Matrix

在代数问题中,矩阵是必不可少的工具,manim中提供了一套展示矩阵(Matrix)的模块,专门用于在动画中显示矩阵格式的数据。关于矩阵的类主要有4个:Matrix:通用的矩阵 IntegerMatrix:元素是整数的矩阵 DecimalMatrix:元素包含小数的矩阵 MobjectMatrix:元素可以是图形的矩…

开源大数据平台的部署(来自工作日志)

开源大数据平台部署 主要步骤 易错点这篇博客内容是我在安装开源hadoop 数据平台时候的工作日志,里面记录了部署平台的主要过程以及容易出错的步骤。一,主要组件包括:二,部署环境规划:3台机器系统:Centos 7.9java: 1.8.220 三,部署顺序: 离线处理组件(主线组件):…

Qt - QtWebEngineWidgets模块

1、QtWebEngineWidgets模块 #include <QtWebEngineWidgets>QT += webenginewidgets1.1 QWebEnginePage 示例代码: #include <QtWebEngineWidgets> #include <QWebEnginePage>//1、创建一个新的 QWebEnginePage 实例:page = new QWebEnginePage(this);//2、…

开源大数据平台的部署

开源大数据平台部署 主要步骤 易错点这篇博客内容是我在安装开源hadoop 数据平台时候的工作日志,里面记录了部署平台的主要过程以及容易出错的步骤。一,主要组件包括:二,部署环境规划:3台机器系统:Centos 7.9java: 1.8.220 三,部署顺序: 离线处理组件(主线组件):…

利用bwa将自己的数据与参考基因组比对与sam格式转换

1.bwa的下载与安装 https://www.jianshu.com/p/19f58a07e6f4 主要参考这篇帖子,如果之前的步骤都走通了的话,依赖什么的不用特别安装,报错了再补也可以安好了之后,进到他的路径,输./bwa,就可以确认bwa有没有安装好了,环境设置好以后可以在其他地方输入bwa,也可以叫他出来…

机器学习 - Machine Learning (III)

1 对抗学习 对抗学习的目的是增加鲁棒性。 对抗生成网络(GAN)包括生成器(Generator)和判别器(Discriminator)。如果目标是创建能够生成新内容的系统,那么生成器是希望得到并优化的模型,这是一个零和问题。1.1 GenB GenB是对抗网络用于VQA的产物,如图添加了偏置模型和目…

VS运行出现此网站无法提供安全连接

场景: SVN获取项目出现冲突后进行处理。 VS运行页面出现此网站无法提供安全连接尝试:清理VS缓存、重启电脑、重启VS、删除项目重新下载、禁用SSL3.0等等(以上都无效) 理解:开启另一个项目运行正常,说明IIS没有坏;删除项目重新下载运行排除项目配置问题(WebConfig等)。…

「代码随想录算法训练营」第十三天 | 二叉树 part3

110. 平衡二叉树题目链接:https://leetcode.cn/problems/balanced-binary-tree/ 题目难度:简单 文章讲解:https://programmercarl.com/0110.平衡二叉树.html 视频讲解:https://www.bilibili.com/video/BV1Ug411S7my 题目状态:通过思路: 采用递归的方式,遍历每个节点的左…