群控系统服务端开发模式-应用开发-业务架构逻辑开发BaseAPI
一、加密工具开发
首先在根目录下extend文件中创建Encipher文件夹,用于专门开发加解密工具,新建RSA算法控制器并命名为Encrypt.php。然后在根目录下config文件夹中创建rsa.php文件,用于配置RSA算法参数。
1、秘钥生成算法
<?php
/*** RSA加密工具* User: 龙哥 三年风水* Date: 2024/10/27/0027* Time: 21:12*/
namespace Encipher;
class Encrypt
{/*** 生成公私钥文件* @ return string*/public static function generateRsa(){$config = array('digest_alg' => config('rsa.digest_alg'),'private_key_bits' => config('rsa.private_key_bits'),'OPENSSL_KEYTYPE_RSA' => config('rsa.OPENSSL_KEYTYPE_RSA'),);$res = openssl_pkey_new($config);openssl_pkey_export($res, $private_key);$public_key = openssl_pkey_get_details($res);$public_key = $public_key["key"];file_put_contents("public.key", $public_key);file_put_contents("private.pem", $private_key);openssl_free_key($res);return "生成成功";}
}
2、秘钥加密算法
<?php
/*** RSA加密工具* User: 龙哥 三年风水* Date: 2024/10/27/0027* Time: 21:12*/
namespace Encipher;
class Encrypt
{/*** 加密算法-采用公钥加密后base64加码* @ param $string* @ return string*/public static function encryptRsa($string){$ssl_public = file_get_contents("public.key");$pu_key = openssl_pkey_get_public($ssl_public);//这个函数可用来判断公钥是否是可用的if (false == $pu_key) return '证书错误';openssl_public_encrypt($string, $data, $pu_key);//公钥加密$data = base64_encode($data);return $data;}
}
3、秘钥解密算法
<?php
/*** RSA加密工具* User: 龙哥 三年风水* Date: 2024/10/27/0027* Time: 21:12*/
namespace Encipher;
class Encrypt
{/*** 解密算法-base64解码后采用私钥解密* @ param $string* @ return string*/public static function decryptRsa($string){$ssl_private = file_get_contents("private.pem");$pi_key = openssl_pkey_get_private($ssl_private);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource idif (false == $pi_key) return '证书错误';openssl_private_decrypt(base64_decode($string), $data, $pi_key);//私钥解密return $data;}
}
4、调用测试-生成公私钥
a、一定要记得添加路由,在根目录下面route文件夹中的app.php文件中追加以下代码
Route::post('index/generate_rsa','Index/generateRsa');
b、在根目录下app文件夹下的controller文件夹中,在Index.php控制器中追加以下代码
<?php
namespace app\controller;
use Encipher\Encrypt;class Index
{/*** 生成公私钥文件* @ return \think\response\Json*/public function generateRsa(){$res = Encrypt::generateRsa();return succ($res);}
}
二、开发Base.php总控业务逻辑
我们根据以下草图可以发现,Base.php是控制登录者信息及验证业务逻辑。那么本控制主要做三件事情,登录后个人资料、角色、菜单:

1、登录信息
a、定义系统必要参数
protected $userId = 0;//用户编号,整个系统内部使用protected $avatar = '';//登录用户的头像protected $username = '';//登录用户的登录名称protected $realname = '';//登录用户的真实名称protected $ip = '';//登录用户授权组protected $departmentId = 0;//登录用户部门编号protected $gradeId = 0;//登录用户级别编号protected $isUnserialize = true;//Redis里面有按钮权限protected $token = '';//当前用户唯一编码protected $roleId = '';//登录用户的权限编号protected $key = '';//登录用户权限组标识protected $butts = [];//操作权限,整个系统内部使用protected $rules = [];//登录用户的权限组,内部使用
b、根据authorization头参数解析数据并查处结果
//初始化方法public function initialize(){parent::initialize(); // TODO: Change the autogenerated stub$this->isLoginAuth();//判断是否登录}//token验证private function isLoginAuth(){$headInfo = $this->request->header();if(!isset($headInfo['authorization']))return err('非法操作!');if(empty($headInfo['authorization']))return err('操作异常!');$tokenValue = explode('|', Encrypt::encryptRsa($headInfo['authorization']));//解密 --转换tokenif(count($tokenValue) != 2)return warn('登录认证权限错误');$token = sha1(sha1($tokenValue[0]).strtotime($tokenValue[1]));$res = Token::setToken($token, $headInfo['authorization']);if($res['status'] === false)return warn($res['info']);//赋值错误信息$this->userId = $res['data']['admin_id'];$this->avatar = $res['data']['avatar'];$this->username = $res['data']['username'];$this->realname = $res['data']['realname'];$this->ip = $res['data']['ip'];$this->departmentId = $res['data']['department_id'];$this->gradeId = $res['data']['grade_id'];$this->roleId = $res['data']['role_id'];$this->token = $token;}
三、提前说明
明天将封装Redis工具、数据库操作工具、及角色方法、菜单方法
相关文章:
群控系统服务端开发模式-应用开发-业务架构逻辑开发BaseAPI
一、加密工具开发 首先在根目录下extend文件中创建Encipher文件夹,用于专门开发加解密工具,新建RSA算法控制器并命名为Encrypt.php。然后在根目录下config文件夹中创建rsa.php文件,用于配置RSA算法参数。 1、秘钥生成算法 <?php /*** RS…...
【AI日记】24.10.27 了解AI的未来
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 工作1 内容:挑选AI大佬的访谈,跳着看了几个时间:2小时 工作2 内容:OpenAI Sam Altman最新访谈:GPT-4o和AI未来 2024.5时间:2小时收…...
【时间之外】IT人求职和创业应知【19】
认知决定你的赚钱能力。以下是今天可能影响你求职和创业的热点新闻: 今日关键字:深圳长沙(备注:我都没有去过) 2024中国(长沙)民营企业科技创新发展大会召开 内容概述: 2024年10月…...
MOE混合专家模型总结(面试)
目录 1. MOE介绍 2.MOE出现的背景 3.有哪些MOE模型 4.门控网络或路由 5.为什么门控网络要引入噪声 6.如何均衡专家间的负载 7.“专家”指什么 8.专家的数量对预训练有何影响 9.什么是topk门控 10.MOE模型的主要特点 11.MOE和稠密模型的对比 12.MOE的优势 13.MOE的挑…...
第8次CCF CSP认证真题解
1、最大波动 题目链接:https://sim.csp.thusaac.com/contest/8/problem/0 100分代码: #include <iostream> #include <algorithm> using namespace std; int main(int argc, char *argv[]) {int n;cin >> n;int a[1010];for(int i …...
2024昆明ICPC A. Two-star Contest(直观命名+详细注释)
Problem - A - Codeforces 思路: 按照等级排序,维护同等级最大评分,每个等级的总评分至少比其第前一个等级的最大评分大1分 吐槽: 思路不难,但坑好多,感觉全踩了一遍 坑:(按解决…...
【算法刷题指南】双指针
🌈个人主页: 南桥几晴秋 🌈C专栏: 南桥谈C 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据…...
HTML,CSS,JavaScript三件套
前言 1.HTML 就是用来写网页的 就是超文本标记语言 1.1快速入门 标签是根标签,就是开始的地方 head就是头,加载一些资源信息,和展示title标题的地方,比如html快速入门那几个字就是title标题标签 body是身体,就是正…...
react 总结+复习+应用加深
文章目录 一、React生命周期1. 挂载阶段(Mounting)补充2. 更新阶段(Updating)补充 static getDerivedStateFromProps 更新阶段应用补充 getSnapshotBeforeUpdate3. 卸载阶段(Unmounting) 二、React组件间的…...
关于 API
关于 API $set 问法:有没有遇到过数据更新了但视图没有更新的情况? <template><div>{{arr}}<button click"btn"></button></div> </template><script> export default {name:"Home"da…...
第15次CCF CSP真题解
1、小明上学 题目链接:https://sim.csp.thusaac.com/contest/15/problem/0 本题是模拟红绿灯计时的题,根据红绿灯转换规则可知,红灯后面通常是绿灯,绿灯后面是黄灯,黄灯过后又是红灯。根据题意,当k 0时&…...
STM32硬件平台
STM32 系列是 STMicroelectronics 设计的高度灵活、广泛应用的微控制器(MCU)系列,支持从低功耗应用到高性能处理的需求,适用于工业、汽车、消费电子和物联网等广泛领域。STM32 系列具有广泛的硬件种类和丰富的功能,以下…...
一文讲明白大模型分布式逻辑(从GPU通信原语到Megatron、Deepspeed)
1. 背景介绍 如果你拿到了两台8卡A100的机器(做梦),你的导师让你学习部署并且训练不同尺寸的大模型,并且写一个说明文档。你意识到,你最需要学习的就是关于分布式训练的知识,因为你可是第一次接触这么多卡…...
【人工智能-初级】第6章 决策树和随机森林:浅显易懂的介绍及Python实践
文章目录 一、决策树简介二、决策树的构建原理2.1 决策树的优缺点优点缺点 三、随机森林简介3.1 随机森林的构建过程3.2 随机森林的优缺点优点缺点 四、Python实现决策树和随机森林4.1 导入必要的库4.2 加载数据集并进行预处理4.3 创建决策树模型并进行训练4.4 可视化决策树4.5…...
时间序列预测(九)——门控循环单元网络(GRU)
目录 一、GRU结构 二、GRU核心思想 1、更新门(Update Gate):决定了当前时刻隐藏状态中旧状态和新候选状态的混合比例。 2、重置门(Reset Gate):用于控制前一时刻隐藏状态对当前候选隐藏状态的影响程度。…...
李东生牵手通力股份IPO注册卡关,三年近10亿“清仓式分红”引关注
《港湾商业观察》施子夫 9月27日,通力科技股份有限公司(以下简称,通力股份)再度提交了注册申请,实际上早在去年11月6日公司已经提交过注册,看起来公司注册环节面临卡关。公开信息显示,通力股份…...
Android13、14特殊权限-应用安装权限适配
Android13、14特殊权限-应用安装权限适配 文章目录 Android13、14特殊权限-应用安装权限适配一、前言二、权限适配三、其他1、特殊权限-应用安装权限适配小结2、dumpsys package查看获取到了应用安装权限3、Android权限系统:应用操作管理类AppOpsManager(…...
DMVPN协议
DMVPN(Dynamic Multipoint VPN)动态多点VPN 对于分公司和分总公司内网实现通信环境下,分公司是很多的。我们不可能每个分公司和总公司都挨个建立ipsec隧道 ,而且如果是分公司和分公司建立隧道,就会很麻烦。此时我们需…...
leetcode动态规划(十八)-零钱兑换II
题目 322.零钱兑换II 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬…...
2024 CSP-J 题解
2024 CSP-J题解 扑克牌 题目给出了一整套牌的定义,但是纯粹在扯淡,完全没有必要去判断给出的牌的花色和点数,我们用一个循环来依次读入每一张牌,如果这个牌在之前出现过,我们就让答案减一。这里建议用map、unorde…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
