摘要:問題問題來了,都是采用向后臺發送請求,這時候如果重定向到無權限的錯誤頁面就會產生問題。最直接的解決方案就是,每一個向后臺發送的請求,后臺都會返回,然后判斷,不符合條件就。
首先要明確的是,ajax是局部刷新,是不支持重定向的,只能通過window.location.href="http://xxx/error.html"的方式實現,在后臺重定向只會把html返回給前臺,頁面并不會跳轉。
需求
首先我們項目采用的是extJs做UI框架,后臺是SSM。現在項目要加入簡單數據權限過濾的功能,于是我使用過濾器,獲取用戶訪問的接口地址,判斷只要與session中的可以訪問的數據接口權限不匹配,那么就跳轉到無權限的錯誤頁面。
問題
問題來了,ExtJs都是采用ajax向后臺發送請求,這時候如果重定向到無權限的錯誤頁面就會產生問題。最直接的解決方案就是,每一個向后臺發送的ajax請求,后臺都會返回message,然后判斷messsage,不符合條件就window.location.href="http://xxx/error.html"。但是,如果初期有這樣的設計就好了,但我這個項目是后期才加權限的功能,如果一個個改起來,肯定是不可能的。
解決方法
解決方法1
新建一個js文件,添加如下代碼:
//為Ext的ajax添加監聽 //requestcomplete:請求完成 Ext.Ajax.addListener("requestcomplete",function(conn, response, options, eOpts){ //后臺也可以放入請求頭還獲取錯誤信息,前臺通過`response.getAllResponseHeaders()`來獲取 //var msg = response.getAllResponseHeaders(); if(response.responseText.indexOf("error") != -1){ window.location.href="http://xxx/error.html"; } },this);
一般我們的項目都是一個主的main.jsp,然后里面一個個ExtJs的iframe,所以在main.jsp中直接引入剛才新建的js,當ajax請求完成后,接收到后臺返回的message,不符合條件,跳轉到錯誤頁面。
解決方法2
方法2比較通用也比較簡單,直接在filter中使用out.print輸出一段js進行跳轉。
UserVo u = (UserVo) session.getAttribute("user"); if (u == null) { PrintWriter out = res.getWriter(); if (req.getHeader("x-requested-with") != null && req.getHeader("x-requested-with").equals("XMLHttpRequest")) { String message = path + "/user/loginHome"; out.print(message); return; }else { out.println(""); out.println(""); out.println(""); return; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66403.html
摘要:接著來,上一篇搭建了基本的項目骨架,到最后,其實啥也沒看見。。。目標全屏顯示左側導航菜單,右側標簽頁切換操作內容區域。一般模型與你后臺返回的數據結構一一對應。給其他組件提供一致接口使用數據。整個構成一個所謂的。 接著來,上一篇搭建了基本的項目骨架,到最后,其實啥也沒看見。。。書接上回,開始寫UI效果。 目標 全屏顯示、左側導航菜單,右側標簽頁切換操作內容區域。包含header和foo...
摘要:原因分析深入研究當瀏覽器檢測到非用戶操作產生的新彈出窗口,則會對其進行阻止。但是,被瀏覽器攔截我們代碼中要彈出的窗口并不是程序員所希望的。 現象 最近在做項目的時候碰到了使用window.open被瀏覽器攔截的情況,搞得人無比郁悶啊,雖然在自己的環境可以對頁面進行放行,但是對用戶來說,不能要求用戶都來通過攔截。何況當出現攔截時,很多小白根本不知道發生了啥,不知道在哪里看被攔截的頁面,簡...
摘要:數據讀取器相當于原始數據格式與標準數據格式之間的橋梁,它屏蔽了原始數據格式不同對程序開發造成的影響。零是有效的,但空字符串無效。 用了Extjs快一年了,這里整理一下model。 數據模型 showImg(https://segmentfault.com/img/bVzXAR); Extjs 中數據包總共包含了40多個類,其中有三個類比其他類有更重要的地位,它們分別是:model、st...
摘要:在項目中,有一些請求或操作會對數據產生影響比如新增刪除更新,針對這類請求一般都需要做一些保護,以防止用戶有意或無意的重復發起這樣的請求導致的數據錯亂。本文總結了一些防止客戶端重復發送請求的方法。 在Web項目中,有一些請求或操作會對數據產生影響(比如新增、刪除、更新),針對這類請求一般都需要做一些保護,以防止用戶有意或無意的重復發起這樣的請求導致的數據錯亂。 本文總結了一些防止客戶端重...
摘要:在項目中,有一些請求或操作會對數據產生影響比如新增刪除更新,針對這類請求一般都需要做一些保護,以防止用戶有意或無意的重復發起這樣的請求導致的數據錯亂。本文總結了一些防止客戶端重復發送請求的方法。 在Web項目中,有一些請求或操作會對數據產生影響(比如新增、刪除、更新),針對這類請求一般都需要做一些保護,以防止用戶有意或無意的重復發起這樣的請求導致的數據錯亂。 本文總結了一些防止客戶端重...
閱讀 4002·2023-04-26 02:13
閱讀 2244·2021-11-08 13:13
閱讀 2729·2021-10-11 10:59
閱讀 1732·2021-09-03 00:23
閱讀 1301·2019-08-30 15:53
閱讀 2275·2019-08-28 18:22
閱讀 3050·2019-08-26 10:45
閱讀 727·2019-08-23 17:58