session会话拦截ajax,session过期,拦截ajax请求并跳转登录页面
1.方法一 :1.1使用filter 和ajaxsetup 對ajax進行攔截并跳轉登錄頁面
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");// 沒有登陸轉向頁面
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)) {// 對登錄頁面不進行過濾
chain.doFilter(request, response);
return;
}else{
request.setAttribute("username", null);
boolean isAjaxRequest = this.isAjaxRequest(hrequest);
if (isAjaxRequest) {
//系統的根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" , // 默認使用POST方式
headers: { // 默認添加請求頭
"Author": "CodePlayer" ,
"Powered-By": "CodePlayer"
} ,
error: function(xhr, textStatus, errorMsg){ // 出錯時默認的處理函數
var sessionStatus = xhr.getResponseHeader('sessionstatus');
if(sessionStatus == 'timeout') {
var top = getTopWinow();
var ids=layer.alert("導入成功!");
window.location.href = "/iad/veiws/login/login.jsp";
}
}
} );
總結: 這種方法的有個問題,就是ajax里面的error方法是一定走的, 提醒信息會出現兩次
方法二:使用js定時器對前臺的session進行查詢(前提是你要將這個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: "由于您長時間沒有操作, session已過期, 請重新登錄"}).on(function (e) {
window.location.href = "/iad/veiws/login/login.jsp";
})
}
}
});
};
總結:這個方法可以將定義時間延長可以兩秒查一次,確定是首先1.你的系統要有公共的頁面,2.定時查詢可能導致系統變慢
session過期時ajax請求刷新瀏覽器
ajax前置處理實現異步請求session過期時跳轉登錄頁面 function checkLogin(json) { if (typeof(json) === 'string' && ...
shiro session過期后ajax請求跳轉(轉)
配置了 Shrio框架,session也集成進去了 ,發現問題session會話過期,點擊頁面,一直請求失敗.本來想集成攔截器,過濾器,但是已經用了shiro框架,sessionDestroyed 方 ...
session超時躍出iframe并跳到登陸頁面(轉載)
session超時跳出iframe并跳到登陸頁面 在網頁編程時,我們經常需要處理,當session過期時,我們要跳到登陸頁面讓用戶登陸,由于我們可能用到IFrame框架,所以我們我登陸頁面需要顯示在整 ...
重寫ajax方法實現異步請求session過期時跳轉登錄頁面(轉)
一般我們會在過濾器里判斷登錄狀態,如果沒登錄就跳轉登錄頁面,過濾器java核心代碼如下: UserItem?loginUser?=?(UserItem)request.getSession().get ...
MOCK.JS 生成隨機數據,攔截 Ajax 請求
mock.js 的用處 前后端分離 :讓前端攻城師獨立于后端進行開發. 增加單元測試的真實性 :通過隨機數據,模擬各種場景. 開發無侵入 :不需要修改既有代碼,就可以攔截 Ajax 請求,返回模擬的響 ...
Mock攔截ajax請求
//mock攔截ajax請求 ,生成隨機數據Mock.mock('./servlet/UserServlet?method=getUser',{ 'list|1-5':[{ 'username':'@ ...
登錄超時,給出提示跳到登錄頁面(ajax、導入、導出)
一.一般頁面登錄超時驗證,可以用過濾器filter,如下: package com.lg.filter; import java.io.IOException; import javax.servle ...
詳解springmvc控制登錄用戶session失效后跳轉登錄頁面
springmvc控制登錄用戶session失效后跳轉登錄頁面,廢話不多少了,具體如下: 第一步,配置 web.xml
記一次IIS發布網站導致系統時常跳入登錄頁面的問題解決
服務器:winserver2012R2 iis 發布網站后,正常瀏覽網頁,時常跳到登錄頁面,第一反應session過期,因為登錄信息都存在session,但session 都是默認配置過期時間為20分 ...
隨機推薦
OC宏和常量
1.通常常量的定義const放在最前面: 2.宏的定義 #define TAG_ID 101,注意:宏名稱和值之間沒有等號,宏定義的末尾也不需要分號
iOS 網絡框架編寫總結
一,常用 1> 不錯的處理接收到的網絡圖片數據的方法 id img= ISNSNULL(pic)?nil:[pic valueForKey:@"img"]; NSString ...
關于H.264 x264 h264 AVC1
1. H.264是MPEG4的第十部分,是一個標準.對頭,國際上兩個視頻專家組(VCEG和MPEG)合作提出的標準,兩個專家組各有各的叫法,所以既叫H.264,也叫AVC. 2.x264是一個編碼器, ...
codeforces B. Making Sequences is Fun 解題報告
題目鏈接:http://codeforces.com/problemset/problem/373/B 題目意思:給出w,m和k,需要找出從m開始,可以有多少個連續的數(m+1,m+2,...)(在添 ...
spoj 3871. GCD Extreme 歐拉+積性函數
3871. GCD Extreme Problem code: GCDEX Given the value of N, you will have to find the value of G. Th ...
js中Math()函數&;&;數據類型轉換
Math()函數: x的y次方:Math.pow(x,y) 取小數點后兩位:num.toFixed(2) 數據類型轉換: 字符串轉換為數字:parseInt(num)轉換為整數:parseFloat( ...
Swift - 判斷設備類型開發兼容的iOS應用(iPad使用分隔視圖控制器)
1,分割視圖控制器(UISplitViewController) 在iPhone應用中,使用導航控制器由上一層界面進入下一層界面. 但iPad屏幕較大,通常使用SplitViewController來 ...
linux安裝tomcat, jdk出現的問題
1)卸載系統自帶的jdk版本:? ?? 查看自帶的jdk:? ?? #rpm -qa|grep gcj? ? ?可能看到如下類似的信息:? ?? libgcj-4.1.2-44.el5? ?? jav ...
<;Mastering KVM Virtualization>;:第一章 了解Linux虛擬化
本章為讀者提供了Linux虛擬化中流行技術的深刻見解,以及相較于其他同類技術的優勢特點.本書共有14章,囊括了KVM虛擬化中的各個方面,從KVM的內部構造開始,并包括了諸如軟件定義網絡(SDN),性能 ...
JS中數組的方法
1. join() Array.join() 是 String.split() 的逆向操作 var arr = [1, 2, 3] arr.join()// "1,2,3" arr ...
總結
以上是生活随笔為你收集整理的session会话拦截ajax,session过期,拦截ajax请求并跳转登录页面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle查表占的物理空间,查询Ora
- 下一篇: 价值1100亿元!300多年前沉船画面曝