日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

session会话拦截ajax,session过期,拦截ajax请求并跳转登录页面

發布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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请求并跳转登录页面的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。