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 相关文章推荐
用JS写的一个TableView控件代码
Jan 23 Javascript
纯CSS打造的导航菜单(附jquery版)
Aug 07 Javascript
Javascript 浮点运算的问题分析与解决方法
Aug 27 Javascript
原生JS可拖动弹窗效果实例代码
Nov 09 Javascript
jQuery判断当前点击的是第几个li的代码
Sep 26 Javascript
灵活的理解JavaScript中的this指向
Feb 25 Javascript
一款简单的jQuery图片标注效果附源码下载
Mar 22 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
Jan 16 Javascript
微信小程序开发中的疑问解答汇总
Jul 03 Javascript
深入理解vue-router之keep-alive
Aug 31 Javascript
原生js实现html手机端城市列表索引选择城市
Jun 24 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
Oct 27 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 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
php文件下载处理方法分析
2015/04/22 PHP
PHP获取文件行数的方法
2015/06/10 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
PHP中单例模式的使用场景与使用方法讲解
2019/03/18 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
简单实用jquery版三级联动select示例
2013/07/04 Javascript
jQuery取得设置清空select选择的文本与值
2014/07/08 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
浅析JS中的 map, filter, some, every, forEach, for in, for of 用法总结
2017/03/29 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
Python守护进程(daemon)代码实例
2015/03/06 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
python使用matplotlib库生成随机漫步图
2018/08/27 Python
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
Python开发之pip安装及使用方法详解
2020/02/21 Python
django admin 添加自定义链接方式
2020/03/11 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
高中生期末评语
2014/01/28 职场文书
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
公司副总经理任命书
2014/06/05 职场文书
关于教师节的广播稿
2014/09/10 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
解除施工合同协议书
2014/10/17 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
Python实现仓库管理系统
2022/05/30 Python