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 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值