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 相关文章推荐
extjs之去除s.gif的影响
Dec 25 Javascript
JavaScript网页定位详解
Jan 13 Javascript
javascript中的括号()用法小结
Apr 14 Javascript
在JS中解析HTML字符串示例代码
Apr 16 Javascript
javascript实现倒计时(精确到秒)
Jun 26 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
Jul 25 Javascript
Move.js入门
Feb 08 Javascript
Bootstrap列表组学习使用
Feb 09 Javascript
Webpack实现按需打包Lodash的几种方法详解
May 08 Javascript
jQuery导航条固定定位效果实例代码
May 26 jQuery
使用nvm管理不同版本的node与npm的方法
Oct 31 Javascript
html5 录制mp3音频支持采样率和比特率设置
Jul 15 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
实用函数3
2007/11/08 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
显示js对象所有属性和方法的函数
2009/10/16 Javascript
JQuery防止退格键网页后退的实现代码
2012/03/23 Javascript
js单例模式详解实例
2013/11/21 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
2019/01/08 Javascript
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
python通过shutil实现快速文件复制的方法
2015/03/14 Python
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
Python实现钉钉发送报警消息的方法
2019/02/20 Python
python实现H2O中的随机森林算法介绍及其项目实战
2019/08/29 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
python图片合成的示例
2020/11/09 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
汇科协同Java笔试题
2012/03/31 面试题
外贸采购员岗位职责
2014/03/08 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
化工实习心得体会
2014/09/09 职场文书
2015年乡镇纪检工作总结
2015/04/22 职场文书
复试通知单模板
2015/04/24 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
Python pandas读取CSV文件的注意事项(适合新手)
2021/06/20 Python