webix+springmvc session超时跳转登录页面


Posted in Javascript onOctober 30, 2016

引言

最近做项目,发现ajax请求不能在服务器中直接重定向到登录页面。查了些资料发现jquery的ajax请求有人给出了方法。但是webix的ajax请求和jquery的有些区别。这里模仿jquery的处理方式实现webix的ajax请求session超时跳转。

具体的做法:

1、查看webix.js源码发现webix.ajax只有请求前的监听函数 "onBeforeAjax", 要做到获取返回状态跳转登录页面必须要有个返回的监听函数,但是源码没有。所以我修改了下源码,加了个返回的监听函数"onAfterAjax"。

红色标记部分是我加的代码,当检测到ajax完成时,自动执行"onAfterAjax"。(代码的位置可以搜索webix.js ,条件"onBeforeAjax",然后在对应的位置加入红色代码就行

if (webix.callEvent("onBeforeAjax", [s, t, e, a, o, null, r])) {
var h = !1;
if ("GET" !== s) {
var l = !1;
for (var c in o)"content-type" == c.toString().toLowerCase() && (l = !0, "application/json" == o[c] && (h = !0));
l || (o["Content-Type"] = "application/x-www-form-urlencoded")
}
if ("object" == typeof e)if (h)e = this.stringify(e); else {
var u = [];
for (var d in e) {
var f = e[d];
(null === f || f === webix.undefined) && (f = ""), "object" == typeof f && (f = this.stringify(f)), u.push(d + "=" + encodeURIComponent(f))
}
e = u.join("&")
}
e && "GET" === s && (t = t + (-1 != t.indexOf("?") ? "&" : "?") + e,
e = null), a.open(s, t, !this.H);
var b = this.Tw;
b && (a.responseType = b);
for (var c in o)a.setRequestHeader(c, o[c]);
var x = this;
return this.master = this.master || n, a.onreadystatechange = function () {
if (!a.readyState || 4 == a.readyState) {
if (webix.callEvent("onAfterAjax", [a]) === !1) {
return false;
};
if (webix.ajax.count++, i && x && !a.aborted) {
if (-1 != webix.ly.find(a))return webix.ly.remove(a);
var t, e, s = x.master || x, r = a.status >= 400 || 0 === a.status;
"blob" == a.responseType || "arraybuffer" == a.responseType ? (t = "", e = a.response) : (t = a.responseText || "", e = x.J(a)), webix.ajax.$callback(s, i, t, e, a, r)
}
x && (x.master = null), i = x = n = null
}
}, this.qh && (a.timeout = this.qh), this.H ? a.send(e || null) : setTimeout(function () {
a.aborted || (-1 != webix.ly.find(a) ? webix.ly.remove(a) : a.send(e || null));
}, 1), this.master && this.master.Ve && this.master.Ve.push(a), this.H ? a : r
}

2、webix.ajx请求没有明显的标志,jquery.ajax的标识是x-requested-with ,所以我模拟给了个标识requestFlag="webix"(可以自己设置个喜欢的),用"onBeforeAjax"设置

webix.attachEvent("onBeforeAjax",function(s, t, e, a, o){o["requestFlag"]="webix"})

3、监听返回状态

webix.attachEvent("onAfterAjax",function(xhr){if(xhr.getResponseHeader("sessionstatus")=='timeout'){window.location.href='/webix/login.html'}});

4、后台代码

4.1 拦截器代码

package com.ljx.filter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class UserInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
}
@Override
public void postHandle(HttpServletRequest arg0,
HttpServletResponse response, Object arg2, ModelAndView arg3)
throws Exception {
response.sendRedirect("/webix/login.html");
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
Object obj = request.getSession().getAttribute("LOGIN");
if (null == obj) { // 未登录
if (request.getHeader("requestFlag") != null
&& request.getHeader("requestFlag").equalsIgnoreCase(
"webix")) { // 如果是ajax请求响应头会有,requestFlag
response.setHeader("sessionstatus", "timeout");// 在响应头设置session状态
} else {
response.sendRedirect(request.getContextPath() + "/login");
}
return false;
}
return true;
}
}

4.2 spring配置文件加入拦截器配置

<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/mvc/*" />
<bean class="com.ljx.filter.UserInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

4.3 在F12控制台执行下webix.ajax查看效果

webix.ajax().get("/webix/mvc/login.action")

以上所述是小编给大家介绍的webix+springmvc session超时跳转登录页面,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的。

Javascript 相关文章推荐
javascript hashtable实现代码
Oct 13 Javascript
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
May 06 Javascript
javascript写的一个模拟阅读小说的程序
Apr 04 Javascript
Node.js实用代码段之正确拼接Buffer
Mar 17 Javascript
Angular排序实例详解
Jun 28 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
Mar 01 Javascript
JS从非数组对象转数组的方法小结
Mar 26 Javascript
vuejs router history 配置到iis的方法
Sep 20 Javascript
用Fundebug插件记录网络请求异常的方法
Feb 21 Javascript
微信小程序实现下拉刷新动画
Jun 21 Javascript
微信小程序嵌入腾讯视频源过程详解
Aug 08 Javascript
vue+Element中table表格实现可编辑(select下拉框)
May 21 Javascript
js获取时间函数及扩展函数的方法
Oct 30 #Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
Oct 30 #Javascript
浅谈JS函数定义方式的区别
Oct 30 #Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
Oct 30 #Javascript
原生js代码实现图片放大境效果
Oct 30 #Javascript
Angular2 多级注入器详解及实例
Oct 30 #Javascript
Javascript 跨域知识详细介绍
Oct 30 #Javascript
You might like
php 空格,换行,跳格使用说明
2009/12/18 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
angular+webpack2实战例子
2017/05/23 Javascript
编写React组件项目实践分析
2018/03/04 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
node脚手架搭建服务器实现token验证的方法
2021/01/20 Javascript
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
Python气泡提示与标签的实现
2020/04/01 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
大学生毕业自我评价范文分享
2013/11/07 职场文书
车间主管岗位职责
2013/11/14 职场文书
追悼会上的答谢词
2014/01/10 职场文书
索赔员岗位职责
2015/02/15 职场文书
遗失说明具结保证书
2015/02/26 职场文书
青涩记忆观后感
2015/06/18 职场文书
初中体育教学随笔
2015/08/15 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python
浅谈MySQL之select优化方案
2021/08/07 MySQL