摘要:問題問題來了,都是采用向后臺發(fā)送請求,這時候如果重定向到無權(quán)限的錯誤頁面就會產(chǎn)生問題。最直接的解決方案就是,每一個向后臺發(fā)送的請求,后臺都會返回,然后判斷,不符合條件就。
首先要明確的是,ajax是局部刷新,是不支持重定向的,只能通過window.location.href="http://xxx/error.html"的方式實現(xiàn),在后臺重定向只會把html返回給前臺,頁面并不會跳轉(zhuǎn)。
需求
首先我們項目采用的是extJs做UI框架,后臺是SSM?,F(xiàn)在項目要加入簡單數(shù)據(jù)權(quán)限過濾的功能,于是我使用過濾器,獲取用戶訪問的接口地址,判斷只要與session中的可以訪問的數(shù)據(jù)接口權(quán)限不匹配,那么就跳轉(zhuǎn)到無權(quán)限的錯誤頁面。
問題
問題來了,ExtJs都是采用ajax向后臺發(fā)送請求,這時候如果重定向到無權(quán)限的錯誤頁面就會產(chǎn)生問題。最直接的解決方案就是,每一個向后臺發(fā)送的ajax請求,后臺都會返回message,然后判斷messsage,不符合條件就window.location.href="http://xxx/error.html"。但是,如果初期有這樣的設(shè)計就好了,但我這個項目是后期才加權(quán)限的功能,如果一個個改起來,肯定是不可能的。
解決方法
解決方法1
新建一個js文件,添加如下代碼:
//為Ext的ajax添加監(jiān)聽 //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,當(dāng)ajax請求完成后,接收到后臺返回的message,不符合條件,跳轉(zhuǎn)到錯誤頁面。
解決方法2
方法2比較通用也比較簡單,直接在filter中使用out.print輸出一段js進(jìn)行跳轉(zhuǎn)。
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; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66403.html
摘要:接著來,上一篇搭建了基本的項目骨架,到最后,其實啥也沒看見。。。目標(biāo)全屏顯示左側(cè)導(dǎo)航菜單,右側(cè)標(biāo)簽頁切換操作內(nèi)容區(qū)域。一般模型與你后臺返回的數(shù)據(jù)結(jié)構(gòu)一一對應(yīng)。給其他組件提供一致接口使用數(shù)據(jù)。整個構(gòu)成一個所謂的。 接著來,上一篇搭建了基本的項目骨架,到最后,其實啥也沒看見。。。書接上回,開始寫UI效果。 目標(biāo) 全屏顯示、左側(cè)導(dǎo)航菜單,右側(cè)標(biāo)簽頁切換操作內(nèi)容區(qū)域。包含header和foo...
摘要:原因分析深入研究當(dāng)瀏覽器檢測到非用戶操作產(chǎn)生的新彈出窗口,則會對其進(jìn)行阻止。但是,被瀏覽器攔截我們代碼中要彈出的窗口并不是程序員所希望的。 現(xiàn)象 最近在做項目的時候碰到了使用window.open被瀏覽器攔截的情況,搞得人無比郁悶啊,雖然在自己的環(huán)境可以對頁面進(jìn)行放行,但是對用戶來說,不能要求用戶都來通過攔截。何況當(dāng)出現(xiàn)攔截時,很多小白根本不知道發(fā)生了啥,不知道在哪里看被攔截的頁面,簡...
摘要:數(shù)據(jù)讀取器相當(dāng)于原始數(shù)據(jù)格式與標(biāo)準(zhǔn)數(shù)據(jù)格式之間的橋梁,它屏蔽了原始數(shù)據(jù)格式不同對程序開發(fā)造成的影響。零是有效的,但空字符串無效。 用了Extjs快一年了,這里整理一下model。 數(shù)據(jù)模型 showImg(https://segmentfault.com/img/bVzXAR); Extjs 中數(shù)據(jù)包總共包含了40多個類,其中有三個類比其他類有更重要的地位,它們分別是:model、st...
摘要:在項目中,有一些請求或操作會對數(shù)據(jù)產(chǎn)生影響比如新增刪除更新,針對這類請求一般都需要做一些保護(hù),以防止用戶有意或無意的重復(fù)發(fā)起這樣的請求導(dǎo)致的數(shù)據(jù)錯亂。本文總結(jié)了一些防止客戶端重復(fù)發(fā)送請求的方法。 在Web項目中,有一些請求或操作會對數(shù)據(jù)產(chǎn)生影響(比如新增、刪除、更新),針對這類請求一般都需要做一些保護(hù),以防止用戶有意或無意的重復(fù)發(fā)起這樣的請求導(dǎo)致的數(shù)據(jù)錯亂。 本文總結(jié)了一些防止客戶端重...
摘要:在項目中,有一些請求或操作會對數(shù)據(jù)產(chǎn)生影響比如新增刪除更新,針對這類請求一般都需要做一些保護(hù),以防止用戶有意或無意的重復(fù)發(fā)起這樣的請求導(dǎo)致的數(shù)據(jù)錯亂。本文總結(jié)了一些防止客戶端重復(fù)發(fā)送請求的方法。 在Web項目中,有一些請求或操作會對數(shù)據(jù)產(chǎn)生影響(比如新增、刪除、更新),針對這類請求一般都需要做一些保護(hù),以防止用戶有意或無意的重復(fù)發(fā)起這樣的請求導(dǎo)致的數(shù)據(jù)錯亂。 本文總結(jié)了一些防止客戶端重...
閱讀 4063·2023-04-26 02:13
閱讀 2280·2021-11-08 13:13
閱讀 2775·2021-10-11 10:59
閱讀 1769·2021-09-03 00:23
閱讀 1335·2019-08-30 15:53
閱讀 2326·2019-08-28 18:22
閱讀 3081·2019-08-26 10:45
閱讀 766·2019-08-23 17:58