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 相关文章推荐
爱恋千雪-US-AscII加密解密工具(网页加密)下载
Jun 06 Javascript
学习面向对象之面向对象的术语
Nov 30 Javascript
jquery 利用show和hidden实现级联菜单示例代码
Aug 09 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
May 11 Javascript
javascript性能优化之DOM交互操作实例分析
Dec 12 Javascript
莱鸟介绍window.print()方法
Jan 06 Javascript
Angular2学习笔记——详解路由器模型(Router)
Dec 02 Javascript
js实现导航吸顶效果
Feb 24 Javascript
vue.js 2.0实现简单分页效果
Jul 29 Javascript
js+html实现点名系统功能
Nov 05 Javascript
使用Promise封装小程序wx.request的实现方法
Nov 13 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
May 14 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基本语法总结
2014/09/06 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
PHP实现简单登录界面
2019/10/23 PHP
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
Bootstarp 基础教程之表单部分实例代码
2017/02/03 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
DataFrame 将某列数据转为数组的方法
2018/04/13 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
python在地图上画比例的实例详解
2020/11/13 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
英国工具中心:UK Tool Centre
2017/07/10 全球购物
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
财务管理专业毕业生求职信范文
2013/09/21 职场文书
学习委员自我鉴定
2014/01/13 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
电话客服工作职责
2014/07/27 职场文书
县委务虚会发言材料
2014/10/20 职场文书
婚前协议书范本
2014/10/27 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript
redis 解决库存并发问题实现数量控制
2022/04/08 Redis
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏