workman服务端开发模式-应用开发-后端api推送修改二

        需要修改两个地方,第一个是总控制里面的续token延时,第二个是操作日志记录

一、总控续token延时方法

        在根目录下app文件夹下controller文件夹下Base.php中修改isLoginAuth方法,具体代码如下:

<?php
/*** 总控制* User: 龙哥 三年风水* Date: 2024/10/27/0027* Time: 22:16*/
namespace app\controller;
use app\BaseController;
use app\model\permission\Menu;
use app\model\permission\Role;
use Encipher\Encrypt;
use app\model\common\Token;
use Error\BaseError;
use Redis\Redis;
class Base extends BaseController
{protected $userId = 0;//用户编号,整个系统内部使用protected $avatar = '';//登录用户的头像protected $username = '';//登录用户的登录名称protected $realname = '';//登录用户的真实名称protected $email = '';//登录用户邮箱protected $ip = '';//登录用户授权组protected $departmentId = 0;//登录用户部门编号protected $gradeId = 0;//登录用户级别编号protected $isUnserialize = true;//Redis里面有按钮权限protected $token = '';//当前用户唯一编码protected $roleId = '';//登录用户的权限编号protected $key = '';//登录用户权限组标识protected $butts = [];//操作权限,整个系统内部使用protected $rules = [];//登录用户的权限组,内部使用protected $randomNumber = '';//随机数编号protected $loginIp = '';//登录IPprotected $browserId = '';//浏览器编号//初始化方法public function initialize(){parent::initialize(); // TODO: Change the autogenerated stub$this->isLoginAuth();//判断是否登录}//token验证private function isLoginAuth(){$headInfo = $this->request->header();if(!isset($headInfo['authorization']))throw new BaseError('非法操作!');if(empty($headInfo['authorization']))throw new BaseError('操作异常!');if(!empty($this->loginIp)){if($this->loginIp != $headInfo['x-real-ip'])throw new BaseError('危险操作!');}$tokenValue = explode('|', Encrypt::decryptRsa($headInfo['authorization']));//解密 --转换tokenif(count($tokenValue) != 2)throw new BaseError('登录认证权限错误',50034,200);$token = sha1(sha1($tokenValue[0]).strtotime($tokenValue[1]));$res = Token::setToken($token, $headInfo['authorization'], $headInfo['x-real-ip']);if($res['status'] === false)throw new BaseError($res['info'],50034,200);//赋值错误信息$this->userId = $res['data']['admin_id'];$this->avatar = $res['data']['avatar'];$this->username = $res['data']['username'];$this->realname = $res['data']['realname'];$this->email = $res['data']['email'];$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;$this->randomNumber = $res['data']['random_number'];$this->loginIp = $res['data']['login_ip'];$this->browserId = $res['data']['browser_id'];}
}

二、修改token数据管理

        在根目录下app文件夹下model文件夹下common文件夹下Token.php中修改setToken方法,具体代码如下:

//修改token整个状态public static function setToken($token, $attack, $clientIp){$data['admin_id'] = 0;$data['username'] = '';$data['avatar'] = '';$data['realname'] = '';$data['email'] = '';$data['ip'] = '';$data['department_id'] = 0;$data['grade_id'] = 0;$data['role_id'] = 0;$data['random_number'] = '';$data['browser_id'] = '';$data['login_ip'] = '';$redisToken = Redis::select(config('cache.stores.redis.token_db'))->get('token_'.$token);if(empty($redisToken))return array('status' => false, 'info' => 'token已经过期咯,请重新登录!', 'data' => $data);//获取系统配置的过期时间$systemParam = SystemModel::dataFind(['id' => 1],'platform_token_expira');//验证是否跨站攻击$attackToken = Redis::select(config('cache.stores.redis.token_db'))->get('token_' . $redisToken);if(!empty($attackToken)){if ($attackToken === $attack){//如果传过来加密后的token与Redis里面记录的一样,就禁止访问、延长过期时间并加入黑名单Redis::select(config('cache.stores.redis.token_db'))->expire('token_'.$token, $systemParam['platform_token_expira']);//加入黑名单//Redis::select(config('cache.stores.redis.default_db'))->sadd('black-list', $clientIp);//return array('status' => false, 'info' => '跨站攻击', 'data' => $data);}}Redis::select(config('cache.stores.redis.token_db'))->expire('token_'.$token, $systemParam['platform_token_expira']);Redis::select(config('cache.stores.redis.token_db'))->setex('token_' . $redisToken, $systemParam['platform_token_expira'], $attack);$resAdminFind = Admin::dataFind(['id' => $redisToken], 'username,avatar,realname,email,ip,department_id,grade_id,role_id,status',true);if ($resAdminFind['status'] !== 1) return array('status' => false, 'info' => '该用户已被禁用', 'data' => $data);$resTokenFind = self::dataFind(['token' => $token],'random_number,browser_id,login_ip',true);$data['admin_id'] = $redisToken;$data['username'] = $resAdminFind['username'];$data['avatar'] = $resAdminFind['avatar'];$data['realname'] = $resAdminFind['realname'];$data['email'] = $resAdminFind['email'];$data['ip'] = $resAdminFind['ip'];$data['department_id'] = $resAdminFind['department_id'];$data['grade_id'] = $resAdminFind['grade_id'];$data['role_id'] = $resAdminFind['role_id'];$data['random_number'] = $resTokenFind['random_number'];$data['browser_id'] = $resTokenFind['browser_id'];$data['login_ip'] = $resTokenFind['login_ip'];return array('status' => true, 'info' => '', 'data' => $data);}

三、管理员日志操作方法

        在根目录下app文件夹下controller文件夹下Base.php中修改setToken方法,具体代码如下:

    /*** 操作日志记录* User: 龙哥·三年风水* Date: 2024/12/12* Time: 17:11* @ param $tokenType 操作类型* @ param $menuName 权限名称*/protected function setToken($tokenType,$menuName){$data['token_type'] = $tokenType;$data['menu_name'] = $menuName;$data['admin_id'] = $this->userId;$data['random_number'] = $this->randomNumber;$data['browser_id'] = $this->browserId;$data['login_ip'] = $this->loginIp;$data['create_time'] = date('Y-m-d',time());$data['login_time'] = date('Y-m-d H:i:s',time());$data['expire_time'] = time();$data['token'] = $this->token;Token::save($data,[]);}

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

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

相关文章

ReactPress 1.6.0:重塑博客体验,引领内容创新

ReactPress 是一个基于Next.js的博客&CMS系统&#xff0c; Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎Star。 体验地址&#xff1a;http://blog.gaoredu.com/ 今天&#xff0c;我们自豪地宣布ReactPress 1.6.0版本的正式发布&#xff0c;…

重拾设计模式--外观模式

文章目录 外观模式&#xff08;Facade Pattern&#xff09;概述定义 外观模式UML图作用 外观模式的结构C 代码示例1C代码示例2总结 外观模式&#xff08;Facade Pattern&#xff09;概述 定义 外观模式是一种结构型设计模式&#xff0c;它为子系统中的一组接口提供了一个统一…

接口测试Day03-postman断言关联

postman常用断言 注意&#xff1a;不需要手敲&#xff0c;点击自动生成 断言响应状态码 Status code&#xff1a;Code is 200 //断言响应状态码为 200 pm.test("Status code is 200", function () {pm.response.to.have.status(200); });pm: postman的实例 test() …

提升专业素养的实用指南

在当今竞争激烈的职场&#xff0c;仅仅拥有专业技能已经不足以立于不败之地。持续提升自身专业素养&#xff0c;才是保持竞争力、实现职业目标的关键。那么&#xff0c;如何才能有效地提升专业素养&#xff0c;在职业道路上走得更稳、更远呢&#xff1f;以下是一些实用性建议&a…

网上球鞋竞拍系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

tryhackme-Pre Security-Windows Fundamentals 3(Windows基础知识3)

任务1&#xff1a;Introduction&#xff08;介绍&#xff09; 我们将继续探索 Windows 操作系统。 总结前两个房间&#xff1a; 在 Windows Fundamentals 1 中&#xff0c;我们介绍了桌面、文件系统、用户帐户控制、控制面板、设置和任务管理器。在 Windows Fundamentals 2 中…

pdf转换文本:基于python的tesseract

电脑系统&#xff1a;win10专业版 不能访问需要魔法上网 安装tesseract 在GitHub上下载:tesseract下载地址 找到自己电脑版本下载 双击安装&#xff0c;一路next&#xff0c;除了这一步 第三个加号点开&#xff0c;把带Chinese的都勾选 安装完成后配置环境&#xff0c;Win …

国产云厂商数据库产品--思维导图

为了对比国产云厂商数据库产品&#xff0c;我查阅了各云厂商的官方介绍&#xff0c;墨天轮等平台的部分数据和文章&#xff0c;整理出了简易的思维导图。 会去整理&#xff0c;也是因为有点懵&#xff0c;比如说阿里的PolarDB数据库&#xff0c;看起来就是一个数据库&#xff…

MongoDB(下)

MongoDB 索引 MongoDB 索引有什么用? 和关系型数据库类似&#xff0c;MongoDB 中也有索引。索引的目的主要是用来提高查询效率&#xff0c;如果没有索引的话&#xff0c;MongoDB 必须执行 集合扫描 &#xff0c;即扫描集合中的每个文档&#xff0c;以选择与查询语句匹配的文…

Unity 3D饼状图效果

一. 效果展示 二.基础类 using System.Collections; using System.Collections.Generic; using UnityEngine;public class DrawCylinder : MonoBehaviour {// 网格渲染器MeshRenderer meshRenderer;// 网格过滤器MeshFilter meshFilter;// 用来存放顶点数据List<Vector3>…

吉利前端、AI面试

诸葛耘墒的在线视频面试 1、小程序端AI视频面试 虚拟人面试官提问 视频口述回答 1、最近的两份工作经历&#xff0c;以及上一份离职原因2、在过往的工作或生活中&#xff0c;需要学习掌握一项与工作有关的技能或兴趣爱好时&#xff0c;你会运用哪些方法和诀窍&#xff0c;投入…

基于容器的云原生,让业务更自由地翱翔云端

无论是要构建一个应用或开发一个更庞大的解决方案&#xff0c;在技术选型时&#xff0c;技术的开放性和可移植性已经成为很多企业优先考虑的问题之一。毕竟没人希望自己未来的发展方向和成长速度被自己若干年前选择使用的某项技术所限制或拖累。 那么当你的业务已经上云&#x…

S32K324 Stack异常分析及解决方案

文章目录 前言正向排查尝试反向排查问题原因分析问题解决处理总结前言 在项目开发过程中,在一次软件变更时,调整了task优先级之后导致应用层软件中的float数据经常性的变为NAN,导致应用层功能失效。本文记录下这个bug的分析及解决过程。 正向排查尝试 由于问题复现的概率…

28、基于springboot的房屋租赁系统

房屋是人类生活栖息的重要场所&#xff0c;随着城市中的流动人口的增多&#xff0c;人们对房屋租赁需求越来越高&#xff0c;为满足用户查询房屋、预约看房、房屋租赁的需求&#xff0c;特开发了本基于Spring Boot的房屋租赁系统。 本文重点阐述了房屋租赁系统的开发过程&…

[react] <NavLink>自带激活属性

NavLink v6.28.0 | React Router 点谁谁就带上类名 当然类名也是可以自定义 <NavLinkto{item.link}className{({ isActive }) > (isActive ? 测试 : )}>{item.title}</NavLink> 有什么用?他会监听你的路由,刷新的话也会带上激活效果

ChatGPT重大更新:新增实时搜索和高级语音

12月17日消息&#xff0c;据报道&#xff0c;OpenAI开启了第八天技术分享直播&#xff0c;对ChatGPT搜索功能进行了大量更新。 此次ChatGPT新增的功能亮点纷呈。其中&#xff0c;实时搜索功能尤为引人注目。OpenAI对搜索算法进行了深度优化&#xff0c;使得用户提出问题后&…

单片机上电后程序不运行怎么排查问题?

1.电源检查。使用电压表测量单片机的电源电压是否正常&#xff0c;确保电压在规定的范围内&#xff0c;如常见的5V。 2.复位检查。检查复位引脚的电压是否正常&#xff0c;在单片机接通电源时&#xff0c;复位引脚通常会有一个高电平&#xff0c;按下复位按钮时&#xff0c;复位…

android studio更改应用图片,和应用名字。

更改应用图标&#xff0c;和名字 先打开AndroidManifest.xml文件。 更改图片文件名字&#xff08; 右键-->构建-->重命名&#xff08;R&#xff09;&#xff09;

kali设置中文输入法

目录 下载 使用 下载 打开终端输入 sudo apt-get install ibus ibus-pinyin 点击y即可 使用 桌面右上角这里可以选择中文输入法 效果如下

VTK知识学习(27)- 图像基本操作(二)

1、图像类型转换 1&#xff09;vtkImageCast 图像数据类型转换在数字图像处理中会频繁用到。一些常用的图像算子(例如梯度算子)在计算时出于精度的考虑&#xff0c;会将结果存储为float或double类型&#xff0c;但在图像显示时&#xff0c;一般要求图像为 unsigned char 类型,…