Heim  >  Artikel  >  Web-Frontend  >  webix+springmvc-Sitzungstimeout springt zur Anmeldeseite

webix+springmvc-Sitzungstimeout springt zur Anmeldeseite

高洛峰
高洛峰Original
2017-01-07 09:32:141410Durchsuche

Einführung

Bei der Arbeit an einem Projekt habe ich kürzlich festgestellt, dass Ajax-Anfragen nicht direkt zur Anmeldeseite auf dem Server umgeleitet werden können. Nachdem ich einige Informationen überprüft hatte, stellte ich fest, dass jemand eine Methode für die Ajax-Anfrage von jquery angegeben hatte. Es gibt jedoch einige Unterschiede zwischen der Ajax-Anfrage von Webix und der von JQuery. Dies imitiert die Verarbeitungsmethode von jquery, um den Timeout-Sprung für Ajax-Anforderungssitzungen von Webix zu implementieren.

Spezifischer Ansatz:

1. Überprüfen Sie den Quellcode von webix.js und stellen Sie fest, dass webix.ajax nur über die Pre-Request-Listening-Funktion „onBeforeAjax“ verfügt Auf der Anmeldeseite müssen Sie über eine zurückgegebene Listening-Funktion verfügen, der Quellcode jedoch nicht. Also habe ich den Quellcode geändert und eine zurückgegebene Listening-Funktion „onAfterAjax“ hinzugefügt.

Der rot markierte Teil ist der Code, den ich hinzugefügt habe. Wenn erkannt wird, dass Ajax abgeschlossen ist, wird „onAfterAjax“ automatisch ausgeführt. (Der Speicherort des Codes kann nach webix.js durchsucht werden, die Bedingung ist „onBeforeAjax“, und dann fügen Sie einfach den roten Code an der entsprechenden Stelle hinzu

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. Die webix.ajx-Anfrage hat keine offensichtliches Zeichen, und das Logo von jquery.ajax ist x-requested-with, also habe ich simuliert, ein Flag requestFlag="webix" zu geben (Sie können Ihre eigene Präferenz festlegen) und es mit „onBeforeAjax“

webix.attachEvent("onBeforeAjax",function(s, t, e, a, o){o["requestFlag"]="webix"})
festlegen

3. Überwachung des Rückgabestatus

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

4 >4.1 Interceptor-Code

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 Interceptor-Konfiguration zur Federkonfigurationsdatei hinzufügen

<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/mvc/*" />
<bean class="com.ljx.filter.UserInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

4.3 Ausführung unter F12-Konsole webix.ajax-Ansichtseffekt

webix.ajax().get("/webix/mvc/login.action")

Das Obige ist die Webix + SpringMVC-Sitzungs-Timeout-Sprung-Anmeldeseite, die von eingeführt wurde Herausgeber. Ich hoffe, dass es für alle hilfreich ist. Wenn Sie Fragen haben, wird der Herausgeber Ihnen rechtzeitig antworten Timeout-Anmeldeseite, achten Sie bitte auf die chinesische PHP-Website 🎜>

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn