Maison > interface Web > js tutoriel > le corps du texte

Le délai d'expiration de la session Webix Springmvc passe à la page de connexion

高洛峰
Libérer: 2017-01-07 09:32:14
original
1464 Les gens l'ont consulté

Introduction

En travaillant récemment sur un projet, j'ai découvert que les requêtes ajax ne pouvaient pas être redirigées directement vers la page de connexion du serveur. Après avoir vérifié certaines informations, j'ai découvert que quelqu'un avait donné une méthode pour la requête ajax de jquery. Mais il existe quelques différences entre la requête ajax de webix et celle de jquery. Cela imite la méthode de traitement de jquery pour implémenter le saut de délai d'expiration de la session de requête ajax de webix.

Approche spécifique :

1. Vérifiez le code source de webix.js et constatez que webix.ajax n'a que la fonction d'écoute de pré-requête "onBeforeAjax". sur la page de connexion, vous devez avoir une fonction d'écoute renvoyée, mais pas le code source. J'ai donc modifié le code source et ajouté une fonction d'écoute renvoyée "onAfterAjax".

La partie marquée en rouge est le code que j'ai ajouté. Lorsqu'il détecte que l'ajax est terminé, "onAfterAjax" est automatiquement exécuté. (L'emplacement du code peut être recherché pour webix.js, la condition est "onBeforeAjax", puis ajoutez simplement le code rouge à l'emplacement correspondant

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
}
Copier après la connexion

2. La requête webix.ajx n'a pas signe évident, et le logo de jquery.ajax est x-requested-with, j'ai donc simulé en donnant un indicateur requestFlag="webix" (vous pouvez définir vos propres préférences), et j'ai utilisé "onBeforeAjax" pour définir

webix.attachEvent("onBeforeAjax",function(s, t, e, a, o){o["requestFlag"]="webix"})
Copier après la connexion

3. Surveillance de l'état de retour

webix.attachEvent("onAfterAjax",function(xhr){if(xhr.getResponseHeader("sessionstatus")=='timeout'){window.location.href='/webix/login.html'}});
Copier après la connexion

4. >4.1 Code de l'intercepteur

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;
}
}
Copier après la connexion

4.2 Ajouter la configuration de l'intercepteur au fichier de configuration du ressort

<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/mvc/*" />
<bean class="com.ljx.filter.UserInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
Copier après la connexion

4.3 Exécuter sous la console F12 effet de vue webix.ajax

webix.ajax().get("/webix/mvc/login.action")
Copier après la connexion

Ce qui précède est la page de connexion par saut de délai d'expiration de la session webix springmvc introduite par l'éditeur . J'espère que cela sera utile à tout le monde. Aide, si vous avez des questions, laissez-moi un message, l'éditeur vous répondra à temps

Pour plus d'articles liés à la page de connexion du délai d'expiration de la session webix springmvc, veuillez faire attention au site Web PHP chinois

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal