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 相关文章推荐
类似CSDN图片切换效果脚本
Sep 17 Javascript
关于JavaScript中的关联数组分析
Apr 09 Javascript
JS之Date对象和获取系统当前时间详解
Jan 13 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
Aug 15 Javascript
jQuery ajax serialize() 方法使用示例
Nov 02 Javascript
jquery获取当前日期的方法
Jan 14 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
Apr 13 Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
Dec 28 Javascript
用jQuery实现可输入多选下拉组合框实例代码
Jan 18 Javascript
es6学习之解构时应该注意的点
Aug 29 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
May 25 Javascript
原生js检测页面加载完毕的实例
Sep 11 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
Home Coffee Roasting
2021/03/03 咖啡文化
PHP中英混合字符串截取函数代码
2011/07/17 PHP
基于simple_html_dom的使用小结
2013/07/01 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
php实现等比例不失真缩放上传图片的方法
2016/11/14 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
学习Bootstrap组件之下拉菜单
2015/07/28 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
Python爬虫文件下载图文教程
2018/12/23 Python
Django上使用数据可视化利器Bokeh解析
2019/07/31 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
python程序文件扩展名知识点详解
2020/02/27 Python
python 模拟登陆github的示例
2020/12/04 Python
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
澳大利亚网上书店:QBD
2021/01/09 全球购物
应届毕业生求职信
2013/11/30 职场文书
直接有效的自我评价
2014/01/11 职场文书
省级四好少年事迹材料
2014/01/25 职场文书
学子宴答谢词
2014/01/25 职场文书
企业务虚会发言材料
2014/10/20 职场文书
全陪导游词开场白
2015/05/29 职场文书
宪法宣传标语100条
2019/10/15 职场文书