Heim > Web-Frontend > js-Tutorial > Hauptteil

webix+springmvc-Sitzungstimeout springt zur Anmeldeseite

高洛峰
Freigeben: 2017-01-07 09:32:14
Original
1467 Leute haben es durchsucht

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
}
Nach dem Login kopieren

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"})
Nach dem Login kopieren
festlegen

3. Überwachung des Rückgabestatus

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

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;
}
}
Nach dem Login kopieren

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>
Nach dem Login kopieren

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

webix.ajax().get("/webix/mvc/login.action")
Nach dem Login kopieren

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 🎜>

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage