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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 session会话拦截ajax,session过期,拦截ajax请求并跳转登录页面 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。