【.net core】【wetercloud】處理前端項目免登陸,且從前端項目跳轉至系統內時的問題

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. 使用方…