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类代码
Jun 27 Javascript
js使下拉列表框可编辑不止是选择
Dec 12 Javascript
使用jquery实现放大镜效果
Sep 02 Javascript
jQuery网页版打砖块小游戏源码分享
Aug 20 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
May 31 Javascript
jquery点击切换背景色的简单实例
Aug 25 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
Sep 04 Javascript
jquery实现简单的瀑布流布局
Dec 11 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
Feb 14 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
Mar 21 Javascript
js实现动态增加文件域表单功能
Oct 22 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
Jul 22 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 友好URL的实现(吐血推荐)
2008/10/04 PHP
php Smarty初体验二 获取配置信息
2011/08/08 PHP
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
PHP 接入微信扫码支付总结(总结篇)
2016/11/03 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
js有序数组的连接问题
2013/10/01 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
js实现日期级联效果
2014/01/23 Javascript
Express.JS使用详解
2014/07/17 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
python实现logistic分类算法代码
2020/02/28 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
食品销售计划书
2014/04/26 职场文书
雷锋精神演讲稿
2014/05/13 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
2016党员干部反腐倡廉心得体会
2016/01/13 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
Django路由层如何获取正确的url
2021/07/15 Python
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript