session会话拦截ajax,session过期,拦截ajax请求并跳转登录页面
1.方法一 :1.1使用filter 和ajaxsetup 對(duì)ajax進(jìn)行攔截并跳轉(zhuǎn)登錄頁面
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse hresponse = (HttpServletResponse)response;
HttpServletRequest hrequest = (HttpServletRequest)request;
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);
String logonStrings = config.getInitParameter("logonStrings"); // 登錄登陸頁面
String redirectPath = hrequest.getContextPath() + config.getInitParameter("redirectPath");// 沒有登陸轉(zhuǎn)向頁面
String disabletestfilter = config.getInitParameter("disabletestfilter");// 過濾器是否有效
String reString = hrequest.getRequestURI();
if (disabletestfilter.toUpperCase().equals("Y")) { // 過濾無效
chain.doFilter(request, response);
return;
}
// User user = ( User ) hrequest.getSession().getAttribute("user");//判斷用戶是否登錄
String session_key = (String) hrequest.getSession().getAttribute("token");
String username = (String) hrequest.getSession().getAttribute("username");
if ("".equals(session_key) || session_key == null) {
String[] logonList = logonStrings.split(",");
if (this.isContains(reString, logonList)) {// 對(duì)登錄頁面不進(jìn)行過濾
chain.doFilter(request, response);
return;
}else{
request.setAttribute("username", null);
boolean isAjaxRequest = this.isAjaxRequest(hrequest);
if (isAjaxRequest) {
//系統(tǒng)的根url
chain.doFilter(request, response);
return;
}
wrapper.sendRedirect(redirectPath);
return;
}
}else {
if(username !=null || username .equals("")) {
Pattern pattern = Pattern.compile("/iad/");
Matcher matcher = pattern.matcher(reString);
Pattern pattern1 = Pattern.compile("/iad/views/login/login.jsp");
Matcher matcher1 = pattern1.matcher(reString);
if(matcher.matches() ||matcher1.matches()){
wrapper.sendRedirect("/iad/views/home/index.jsp");
return;
}else {
chain.doFilter(request, response);
return;
}
}else{
boolean isAjaxRequest = this.isAjaxRequest(hrequest);
if (isAjaxRequest) {
chain.doFilter(request, response);
return;
}
Pattern pattern = Pattern.compile(".*\\/views\\/login\\/login\\.jsp");
Matcher matcher = pattern.matcher(reString);
Pattern pattern2 = Pattern.compile(".*\\/oms/");
Matcher matcher2 = pattern2.matcher(reString);
// 是否是登陸頁面
if (matcher.matches() || matcher2.matches()) {
request.setAttribute("username", username);
wrapper.sendRedirect("/iad/views/home/index.jsp");
return;
}
chain.doFilter(request, response);
return;
}
}
}
判斷是否為ajax
public static boolean isAjaxRequest(HttpServletRequest request) {
String header = request.getHeader("X-Requested-With");
if (header != null && "XMLHttpRequest".equals(header))
return true;
else
return false;
}
1.2? 全局js代碼 可以抽取公共js 引入到你想要的頁面
$.ajaxSetup( {
type: "POST" , // 默認(rèn)使用POST方式
headers: { // 默認(rèn)添加請(qǐng)求頭
"Author": "CodePlayer" ,
"Powered-By": "CodePlayer"
} ,
error: function(xhr, textStatus, errorMsg){ // 出錯(cuò)時(shí)默認(rèn)的處理函數(shù)
var sessionStatus = xhr.getResponseHeader('sessionstatus');
if(sessionStatus == 'timeout') {
var top = getTopWinow();
var ids=layer.alert("導(dǎo)入成功!");
window.location.href = "/iad/veiws/login/login.jsp";
}
}
} );
總結(jié): 這種方法的有個(gè)問題,就是ajax里面的error方法是一定走的, 提醒信息會(huì)出現(xiàn)兩次
方法二:使用js定時(shí)器對(duì)前臺(tái)的session進(jìn)行查詢(前提是你要將這個(gè)js放到公共頁面)
@ResponseBody
@RequestMapping("/loginCheck")
public Boolean loginCheck(HttpServletRequest request, HttpServletResponse response) {
String session_key = (String) request.getSession().getAttribute("token");
String username = (String) request.getSession().getAttribute("username");
if (session_key == null || username == null) {
response.setHeader("sessionstatus", "timeout");
return false;
}
return true;
}
var timeid=window.setInterval("checkSession()", 1000);
checkSession= function () {
$.ajax({
url: "../../loginCheck",
type: "POST",
dataType: "json",
success: function (result) {
if (result != true) {
window.clearInterval(timeid);
Ewin.alert({message: "由于您長(zhǎng)時(shí)間沒有操作, session已過期, 請(qǐng)重新登錄"}).on(function (e) {
window.location.href = "/iad/veiws/login/login.jsp";
})
}
}
});
};
總結(jié):這個(gè)方法可以將定義時(shí)間延長(zhǎng)可以兩秒查一次,確定是首先1.你的系統(tǒng)要有公共的頁面,2.定時(shí)查詢可能導(dǎo)致系統(tǒng)變慢
session過期時(shí)ajax請(qǐng)求刷新瀏覽器
ajax前置處理實(shí)現(xiàn)異步請(qǐng)求session過期時(shí)跳轉(zhuǎn)登錄頁面 function checkLogin(json) { if (typeof(json) === 'string' && ...
shiro session過期后ajax請(qǐng)求跳轉(zhuǎn)(轉(zhuǎn))
配置了 Shrio框架,session也集成進(jìn)去了 ,發(fā)現(xiàn)問題session會(huì)話過期,點(diǎn)擊頁面,一直請(qǐng)求失敗.本來想集成攔截器,過濾器,但是已經(jīng)用了shiro框架,sessionDestroyed 方 ...
session超時(shí)躍出iframe并跳到登陸頁面(轉(zhuǎn)載)
session超時(shí)跳出iframe并跳到登陸頁面 在網(wǎng)頁編程時(shí),我們經(jīng)常需要處理,當(dāng)session過期時(shí),我們要跳到登陸頁面讓用戶登陸,由于我們可能用到IFrame框架,所以我們我登陸頁面需要顯示在整 ...
重寫ajax方法實(shí)現(xiàn)異步請(qǐng)求session過期時(shí)跳轉(zhuǎn)登錄頁面(轉(zhuǎn))
一般我們會(huì)在過濾器里判斷登錄狀態(tài),如果沒登錄就跳轉(zhuǎn)登錄頁面,過濾器java核心代碼如下: UserItem?loginUser?=?(UserItem)request.getSession().get ...
MOCK.JS 生成隨機(jī)數(shù)據(jù),攔截 Ajax 請(qǐng)求
mock.js 的用處 前后端分離 :讓前端攻城師獨(dú)立于后端進(jìn)行開發(fā). 增加單元測(cè)試的真實(shí)性 :通過隨機(jī)數(shù)據(jù),模擬各種場(chǎng)景. 開發(fā)無侵入 :不需要修改既有代碼,就可以攔截 Ajax 請(qǐng)求,返回模擬的響 ...
Mock攔截ajax請(qǐng)求
//mock攔截ajax請(qǐng)求 ,生成隨機(jī)數(shù)據(jù)Mock.mock('./servlet/UserServlet?method=getUser',{ 'list|1-5':[{ 'username':'@ ...
登錄超時(shí),給出提示跳到登錄頁面(ajax、導(dǎo)入、導(dǎo)出)
一.一般頁面登錄超時(shí)驗(yàn)證,可以用過濾器filter,如下: package com.lg.filter; import java.io.IOException; import javax.servle ...
詳解springmvc控制登錄用戶session失效后跳轉(zhuǎn)登錄頁面
springmvc控制登錄用戶session失效后跳轉(zhuǎn)登錄頁面,廢話不多少了,具體如下: 第一步,配置 web.xml
記一次IIS發(fā)布網(wǎng)站導(dǎo)致系統(tǒng)時(shí)常跳入登錄頁面的問題解決
服務(wù)器:winserver2012R2 iis 發(fā)布網(wǎng)站后,正常瀏覽網(wǎng)頁,時(shí)常跳到登錄頁面,第一反應(yīng)session過期,因?yàn)榈卿浶畔⒍即嬖趕ession,但session 都是默認(rèn)配置過期時(shí)間為20分 ...
隨機(jī)推薦
OC宏和常量
1.通常常量的定義const放在最前面: 2.宏的定義 #define TAG_ID 101,注意:宏名稱和值之間沒有等號(hào),宏定義的末尾也不需要分號(hào)
iOS 網(wǎng)絡(luò)框架編寫總結(jié)
一,常用 1> 不錯(cuò)的處理接收到的網(wǎng)絡(luò)圖片數(shù)據(jù)的方法 id img= ISNSNULL(pic)?nil:[pic valueForKey:@"img"]; NSString ...
關(guān)于H.264 x264 h264 AVC1
1. H.264是MPEG4的第十部分,是一個(gè)標(biāo)準(zhǔn).對(duì)頭,國(guó)際上兩個(gè)視頻專家組(VCEG和MPEG)合作提出的標(biāo)準(zhǔn),兩個(gè)專家組各有各的叫法,所以既叫H.264,也叫AVC. 2.x264是一個(gè)編碼器, ...
codeforces B. Making Sequences is Fun 解題報(bào)告
題目鏈接:http://codeforces.com/problemset/problem/373/B 題目意思:給出w,m和k,需要找出從m開始,可以有多少個(gè)連續(xù)的數(shù)(m+1,m+2,...)(在添 ...
spoj 3871. GCD Extreme 歐拉+積性函數(shù)
3871. GCD Extreme Problem code: GCDEX Given the value of N, you will have to find the value of G. Th ...
js中Math()函數(shù)&;&;數(shù)據(jù)類型轉(zhuǎn)換
Math()函數(shù): x的y次方:Math.pow(x,y) 取小數(shù)點(diǎn)后兩位:num.toFixed(2) 數(shù)據(jù)類型轉(zhuǎn)換: 字符串轉(zhuǎn)換為數(shù)字:parseInt(num)轉(zhuǎn)換為整數(shù):parseFloat( ...
Swift - 判斷設(shè)備類型開發(fā)兼容的iOS應(yīng)用(iPad使用分隔視圖控制器)
1,分割視圖控制器(UISplitViewController) 在iPhone應(yīng)用中,使用導(dǎo)航控制器由上一層界面進(jìn)入下一層界面. 但iPad屏幕較大,通常使用SplitViewController來 ...
linux安裝tomcat, jdk出現(xiàn)的問題
1)卸載系統(tǒng)自帶的jdk版本:? ?? 查看自帶的jdk:? ?? #rpm -qa|grep gcj? ? ?可能看到如下類似的信息:? ?? libgcj-4.1.2-44.el5? ?? jav ...
<;Mastering KVM Virtualization>;:第一章 了解Linux虛擬化
本章為讀者提供了Linux虛擬化中流行技術(shù)的深刻見解,以及相較于其他同類技術(shù)的優(yōu)勢(shì)特點(diǎn).本書共有14章,囊括了KVM虛擬化中的各個(gè)方面,從KVM的內(nèi)部構(gòu)造開始,并包括了諸如軟件定義網(wǎng)絡(luò)(SDN),性能 ...
JS中數(shù)組的方法
1. join() Array.join() 是 String.split() 的逆向操作 var arr = [1, 2, 3] arr.join()// "1,2,3" arr ...
總結(jié)
以上是生活随笔為你收集整理的session会话拦截ajax,session过期,拦截ajax请求并跳转登录页面的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle查表占的物理空间,查询Ora
- 下一篇: 表格数字乘以百分比怎么算_EXCEL记住