1.前端项目访问后台内容时免登陆(一般用于后台接口需要校验登陆时)

处理思路:将后台用户的登陆校验令牌信息在用户登录后添加至前端项目访问地址的参数列表中,如:

https://yourdomain/Home/Index#/https://yourdomain/virtualdirectory/?watercloud_Token=86df42b8-1baa-4e6f-8222-7fa8859e34dd&watercloud_Mark=cf06dad9-3a1c-4c6d-8ccb-4f65aecd20c6&pc_WC-Token=08dddb95-dc77-4fc0-8d83-5bc78a7c8086

修改后台菜单页面链接:此处以设置首页地址为例,如果需要设置为菜单地址则需要增加逻辑判断

在WaterCloud.Web\Controllers\ClientsDataController.cs文件中,修改GetMenuListNew方法

/// <summary>
/// 菜单按钮信息
/// </summary>
/// <returns></returns>
private async Task<string> GetMenuListNew()
{var currentuser = _userService.currentuser;string pc_token =  await CacheHelper.GetAsync<string>("pc_" + GlobalContext.SystemConfig.TokenName + "_" + currentuser.UserId + "_" + currentuser.LoginTime);var roleId = currentuser.RoleId;StringBuilder sbJson = new StringBuilder();InitEntity init = new InitEntity();init.homeInfo = new HomeInfoEntity();//首页信息实体var url = HttpUtility.UrlEncode( $"watercloud_Token={currentuser.LoginToken}&watercloud_Mark={currentuser.loginMark}&pc_WC-Token={pc_token}");//设置首页地址init.homeInfo.href = $"{GlobalContext.SystemConfig.HomePage}?{url}";//	https://qzgt.etianshui.com/qzgtxzgl	init.logoInfo = new LogoInfoEntity();var systemset = await _setService.GetForm(currentuser.CompanyId);//修改主页及logo参数init.logoInfo.title = systemset.F_LogoCode;init.logoInfo.image = ".." + systemset.F_Logo;init.menuInfo = new List<MenuInfoEntity>();init.menuInfo = ToMenuJsonNew(await _roleAuthorizeService.GetMenuList(roleId), "0");sbJson.Append(init.ToJson());return sbJson.ToString();
}

此时在打开该前端项目地址时,将可在前端项目页面中,通过页面参数获取后台登陆用户的令牌信息:、watercloud_Token、pc_WC-Token

在调用接口时,可以通过传输令牌信息,后台可通过令牌信息(应该是watercloud_Token,如果不是就换成watercloud_Token)获取缓存中的当前登录用户信息,如:

var authHeader = Request.Headers["WC-Token"].ToString();//从请求中的headers中获取令牌信息
var model = await CacheHelper.GetAsync<OperatorModel>("watercloud_operator_"+authHeader+"");//在缓存中获取当前登录用户信息

获取当前用户之后则可进行之后的业务流程

2.前端项目跳转至系统内

在获取登录令牌信息后,可将令牌信息内容设置在cookie中并发起连接的跳转或通过弹框(iframe)打开地址或新页面打开链接(注意:此处通过前端项目打开后台系统菜单地址时,需要前端页面和后台系统在同一个浏览器中打开,且后台必须先登录,后进行跳转,否则将无法识别跳转页面的脚本内容导致页面报错

前端处理内容:在获取令牌信息后,需将信息格式化为cookie字符串并设置cookie,然后发起连接跳转

拼接的方式是:参数名+等号+参数+分号+空格(此处是否一定需要加空格没有深究,仅是按照后台页面上显示的内容进行复刻

//watercloud_Token,watercloud_Mark,pc_WC-Token为页面获取到的令牌信息。wc_returnurl为后台系统菜单地址
document.cookie = "watercloud_Token=86df42b8-1baa-4e6f-8222-7fa8859e34dd; watercloud_Mark=cf06dad9-3a1c-4c6d-8ccb-4f65aecd20c6; pc_WC-Token=08dddb95-dc77-4fc0-8d83-5bc78a7c8086; wc_returnurl=/NeiWaiQin/Cardreplacement/Index;"
//以新页面打开方式打开链接
window.open("https://yourDomain/NeiWaiQin/Cardreplacement/Index")

执行后将跳转至后台系统指定菜单下,如:

3.弹框方式打开时页面按钮不显示问题

引发该问题的原因在于系统框架脚本中判断按钮是否显示的条件为:

var moduleId = top.$(".layui-tab-title>.layui-this").attr("lay-id");

此时获取到的moduleId值为:

https://yourdomain/Home/Index#/https://yourdomain/virtualdirectory/?watercloud_Token=86df42b8-1baa-4e6f-8222-7fa8859e34dd&watercloud_Mark=cf06dad9-3a1c-4c6d-8ccb-4f65aecd20c6&pc_WC-Token=08dddb95-dc77-4fc0-8d83-5bc78a7c8086

系统菜单中无改内容所以按钮不显示,所以修改判断条件即可

解决方案:修改WaterCloud.Web\wwwroot\js\lay-module\waterCloud\common.js文件中的authorizeButtonNew方法:(增加虚拟路径判断条件,如果获取值中存在虚拟路径内容,则判断为前端项目跳转至后台的情况,将moduleId值设置为location.pathname(当前打开链接地址,从前端项目跳转至后台系统菜单时此处的值为:NeiWaiQin/Workovertime/Index),系统判断如果当前人员有该按钮权限则显示按钮)

//按钮权限(控制js模板,格式必须严格,新)
authorizeButtonNew: function (innerHTML) {//行操作权限控制var moduleId = top.$(".layui-tab-title>.layui-this").attr("lay-id");if (!moduleId || moduleId.indexOf("/qzgtxzgl/") != -1) {//增加虚拟路径判断,如果取不到值或者是大数据链接进入,获取当前pathnamemoduleId = location.pathname;}var returnhtml = '';//没有就全清if (!top.clients || !top.clients.authorizeButton) {return returnhtml;}var dataJson = top.clients.authorizeButton[moduleId.split("?")[0]];if (innerHTML.indexOf('</button>') > -1) {var buttonHumanized = sessionStorage.getItem('watercloudButtonHumanized');var tempList = innerHTML.split('</button>');for (var i = 0; i < tempList.length; i++) {if (tempList[i].indexOf('<button ') > -1) {var itemList = tempList[i].split('<button ');returnhtml = returnhtml + itemList[0];if (itemList[1].indexOf(' authorize') == -1) {returnhtml = returnhtml + '<button ' + itemList[1] + '</button>';}else if (dataJson != undefined) {$.each(dataJson, function (i) {if (itemList[1].indexOf('id="' + dataJson[i].F_EnCode + '"') > -1) {returnhtml = returnhtml + '<button ' + itemList[1] + '</button>';return false;}});}if (!!buttonHumanized) {returnhtml = returnhtml.replace('layui-hide','');}if (itemList.length>2) {returnhtml = returnhtml + itemList[2];}}else {returnhtml = returnhtml + tempList[i];}}}else if (innerHTML.indexOf('</a>') > -1){var tempList = innerHTML.split('</a>');for (var i = 0; i < tempList.length; i++) {if (tempList[i].indexOf('<a ') > -1) {var itemList = tempList[i].split('<a ');returnhtml = returnhtml + itemList[0];if (itemList[1].indexOf(' authorize') == -1) {returnhtml = returnhtml + '<a ' + itemList[1] + '</a>';}else if (dataJson != undefined) {$.each(dataJson, function (i) {if (itemList[1].indexOf('id="' + dataJson[i].F_EnCode + '"') > -1) {returnhtml = returnhtml + '<a ' + itemList[1] + '</a>';return false;}});}if (itemList.length > 2) {returnhtml = returnhtml + itemList[2];}}else {returnhtml = returnhtml + tempList[i];}}}//去除隐藏//returnhtml = returnhtml.replace(/ layui-hide/g, '');return returnhtml;
},

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

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

相关文章

设备 AI 知识库,管理效率新飞跃

在设备管理领域&#xff0c;高效解决设备故障、合理规划维护工作对企业生产运营至关重要。易点易动设备管理系统新推出的设备 AI 知识库&#xff0c;为提升管理效率带来了新契机。设备 AI 知识库集成先进的人工智能技术&#xff0c;是设备管理领域的创新应用。易点易动设备管理…

C#绘制斐波那契螺旋

Fabonacci 数列&#xff0c;也就是”兔子数列“&#xff0c; 如果第一项为0的话&#xff0c;就是&#xff0c; 0&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34&#xff0c;55&#xff0c;89……

JavaScript 任务 - clearTimeout 函数与 clearInterval 函数

clearTimeout 函数 1、基本介绍 clearTimeout 函数用于取消先前通过 setTimeout 函数设置的定时器 clearTimeout(【timeoutID】)参数说明timeoutID要取消的定时器的标识符&#xff0c;这个 ID 是由 setTimeout 函数返回的2、演示 let timeoutId1 setTimeout(() > {console.…

在 CentOS 7 中使用 systemd 创建自定义服务

systemd 创建自定义服务简述创建自定义服务步骤文件覆盖优先级创建服务流程在 /etc/systemd/system/ 目录下创建 .service 文件&#xff08;需 root 权限&#xff09;&#xff1a;编写服务配置模板Systemd 服务文件三大区块详解[Unit] 区块 - 服务元数据与依赖[Service] 区块 -…

【QT】printsupport库远程实现打印机打印

【QT】printsupport库远程实现打印机打印 前言 思路 实现 当前所有可用打印机浏览 打印预览 打印输出 手动选择打印 自动打印 防呆补充 库打包 前言 在打印机的通讯控制方式中,有USB、网口、串口、WIFI等,针对局域网环境下,用自研软件控制打印机打印的应用场景,针对自研软…

LT3045EDD#TRPBF ADI亚德诺 超低噪声LDO稳压器 电子元器件IC

LT3045EDD#TRPBF ADI 超低噪声LDO稳压器专业解析1. 产品技术档案LT3045EDD#TRPBF是ADI&#xff08;Analog Devices Inc.&#xff09;推出的超低噪声/超高PSRR线性稳压器&#xff0c;采用DFN-12 (3x3mm)封装&#xff0c;以其0.8μVRMS超低噪声和79dB超高频PSRR成为精密电源设计。…

易语言模拟真人鼠标轨迹算法 - 非贝塞尔曲线

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟人…

Spring Boot 3 数据源连接信息存储方法

在Spring Boot 3中&#xff0c;数据源连接信息的存储方式主要有以下几种&#xff0c;根据安全性和环境需求选择合适的方式&#xff1a; 1. 配置文件&#xff08;推荐基础方式&#xff09; 位置&#xff1a;src/main/resources/application.properties 或 application.yml 示例…

按键序列常用示例

按键序列常用示例 按键编码 基础按键对应编码 A-Z 原字符即可 KeyCodeSHIFTCTRL^ALT% 其他按键 KeyCodeBACKSPACE{BACKSPACE}, {BS}, or {BKSP}BREAK{BREAK}CAPS LOCK{CAPSLOCK}DEL or DELETE{DELETE} or {DEL}DOWN ARROW{DOWN}END{END}ENTER{ENTER} or ~ESC{ESC}HELP{HEL…

【LeetCode Solutions】LeetCode 热题 100 题解(36 ~ 40)

CONTENTS二叉树 - LeetCode 94. 二叉树的中序遍历&#xff08;简单&#xff09;二叉树 - LeetCode 104. 二叉树的最大深度&#xff08;简单&#xff09;二叉树 - LeetCode 226. 翻转二叉树&#xff08;简单&#xff09;二叉树 - LeetCode 101. 对称二叉树&#xff08;简单&…

数据处理分析环境搭建+Numpy使用教程

环境搭建 数据分析常用开源库 Numpy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库。是一个运行速度非常快的数学库&#xff0c;主要用于数组计算包含&#xff1a; 一个强大的N维数组对象 ndarray广播功能函数整合 C/C/Fortran 代码的工具线性代数、傅里叶变换、随机…

实战多屏Wallpaper壁纸显示及出现黑屏问题bug分析-学员作业

背景&#xff1a; 在大家看了上一篇google官方对于多屏壁纸这块的介绍后 安卓Wallpaper壁纸部分对多屏的支持-Google官方文档介绍 可能还是对于壁纸支持多屏这块没有相关的实战性的认知&#xff0c;所以本文就开始带大家来进行部分解读和实战。 壁纸多屏显示原理文档解读&a…

Vue插槽---slot详解

1、什么是 Vue 插槽&#xff1f;Vue 插槽&#xff08;Slot&#xff09;​​ 是 Vue 提供的一种非常强大且灵活的机制&#xff0c;用于实现&#xff1a;父组件向子组件传递一段模板内容&#xff08;HTML / 组件等&#xff09;&#xff0c;让子组件在指定位置动态渲染这些内容。可…

STM32 - Embedded IDE - GCC - 显著减少固件的体积

导言如上图所示&#xff0c;在编译器附加选项&#xff08;全局&#xff09;里添加--specsnano.specs&#xff0c;告诉编译器使用newlib-nano替代newlib去编译代码。 newlib vs. newlib-nano newlib 是 GNU ARM 工具链默认的 C 标准库&#xff0c;功能完整&#xff0c;但体积较大…

python的美食交流社区系统

前端开发框架:vue.js 数据库 mysql 版本不限 后端语言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 数据库工具&#xff1a;Navicat/SQLyog等都可以 摘要&…

《Redis持久化机制对比与RDB/AOF调优方案》

&#x1f4da; Redis持久化机制对比与RDB/AOF调优方案 &#x1f9e0;前言 在生产环境中&#xff0c;Redis 常常被用作缓存&#xff0c;但在更多场景下&#xff0c;它还存储着核心业务数据&#xff08;如会话、订单、队列任务等&#xff09;。一旦 Redis 宕机、数据丢失&#…

eXtremeDB 医疗设备开发实战:从合规到实时,构建 EN62304 级数据管理系统

在医疗设备开发领域&#xff0c;数据管理的 “可靠性” 与 “合规性” 是不可逾越的红线 —— 监护仪心率数据的丢失可能延误诊断时机&#xff0c;胰岛素泵剂量记录的错误则直接威胁患者生命安全。eXtremeDB 凭借对 EN62304 标准的深度合规支持、硬实时数据处理能力及多层次安全…

linux 设备驱动的分层思想

一、 概述像这样的分层设计在linux的input、RTC、MTD、I2c、SPI、tty、USB等诸多类型设备驱动中屡见不鲜,下面对这些驱动进行详细的分析。二、 输入设备驱动输入设备&#xff08;如按键、键盘、触摸屏、鼠标等&#xff09;是典型的字符设备&#xff0c;其一般的工…

【嵌入式硬件实例】-555定时器驱动直流无刷电机

555定时器驱动直流无刷电机 文章目录 555定时器驱动直流无刷电机 1、555定时器介绍 2、BLDC,无刷直流电机 3、DRV10866 驱动器 4、硬件准备与接线 5、电路工作原理 在这个项目中,我们将使用 555 定时器 IC 和 DRV10866 驱动器 IC 制作 BLDC、无刷直流电机驱动电路。无刷电机可…

Helm 常用命令 + Bitnami 中间件部署速查表

文章目录一、Helm 常用命令速查表1.1. 仓库管理1.2. Chart 搜索1.3. 应用部署1.4. 应用管理二、Bitnami 常用中间件部署示例三、常用自定义参数&#xff08;values.yaml 配置项&#xff09;四、安装后的访问方式五、一键安装脚本 install-middleware.sh5.1. 完整脚本5.2. 使用方…