Maison > Article > interface Web > Le délai d'expiration de la session Webix Springmvc passe à la page de connexion
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 }
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"})
3. Surveillance de l'état de retour
webix.attachEvent("onAfterAjax",function(xhr){if(xhr.getResponseHeader("sessionstatus")=='timeout'){window.location.href='/webix/login.html'}});
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; } }
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>
4.3 Exécuter sous la console F12 effet de vue webix.ajax
webix.ajax().get("/webix/mvc/login.action")
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