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 相关文章推荐
百度 popup.js 完美修正版非常的不错 脚本之家推荐
Apr 17 Javascript
jquery导航制件jquery鼠标经过变色效果示例
Dec 05 Javascript
使用node.js 制作网站前台后台
Nov 13 Javascript
JavaScript驾驭网页-DOM
Mar 24 Javascript
jquery使用on绑定a标签无效 只能用live解决
Jun 02 Javascript
vue2里面ref的具体使用方法
Oct 27 Javascript
js实现一个简单的MVVM框架示例
Jan 15 Javascript
AjaxFileUpload.js实现异步上传文件功能
Apr 19 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
Jul 12 jQuery
在vue中使用Echarts利用watch做动态数据渲染操作
Jul 20 Javascript
JavaScript继承的三种方法实例
May 12 Javascript
简单聊聊TypeScript只读修饰符
Apr 06 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
桌面中心(一)创建数据库
2006/10/09 PHP
第十一节--重载
2006/11/16 PHP
php基础知识:控制结构
2006/12/13 PHP
PHP计划任务、定时执行任务的实现代码
2011/04/23 PHP
php操作mongoDB实例分析
2014/12/29 PHP
基于jquery的气泡提示效果
2010/05/31 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
js调用css属性写法
2013/09/21 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
python从入门到精通(DAY 3)
2015/12/20 Python
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
在matplotlib的图中设置中文标签的方法
2018/12/13 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
自荐信怎么写呢?
2013/12/09 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
财务部绩效考核方案
2014/05/04 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
党校党性分析材料
2014/12/19 职场文书
工程催款通知书
2015/04/17 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js