Benachrichtigt den Benutzer über session-timeout im Java EE
Meine Anforderung teilt der Benutzer mit einem popup, die sagen, dass die Benutzer-session ist über die Zeit in x Sekunden, falls der Anwender nicht durchführen jegliche Aktivität auf der web-Seite.
Neben dieser Anforderung ist, dekrementiert den Wert x Sekunden dynamisch in das popup.
Die Umgebung, die ich verwenden, ist Java EE.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nutzen
HttpSession#getMaxInactiveInterval()
undsetTimeout()
. Es gibt keine Notwendigkeit für Ajax in diesen bestimmten Zweck, es sei denn, Sie möchten, verschieben Sie den timeout auf jede client-Aktivität (polling).Einfaches Beispiel:
Zum verringern der Zeit, in der message-magisch, dann anstelle der grundlegenden
alert()
müssen Sie ein overlay mit einem div, wobei Sie die Kontrolle über die Inhalte durch HTML-DOM-Baum und machen Gebrauch von anderensetTimeout()
auf 1 Sekunde, um den text dynamisch.Beachten Sie, dass dieses Skript ist, um bedient zu werden, die von der
JspServlet
um die EL zu arbeiten. So müssen Sie das Skript in den HTML -<head>
von der JSP-Seite, oder wenn Sie wirklich wollen, um alle JS in einem separaten*.js
- Datei, dann müssen Sie damit denJspServlet
Griff*.js
Anforderungen als gut.XMLHttpRequest
zum aktualisieren der Sitzung ist, dass der Benutzer nicht brauchen, um Weg zu navigieren, um zu vermeiden, das timeout. Dies kann nützlich sein, beim ausfüllen von einem Formular zum Beispiel.Ich glaube nicht, dass Java/Java EE wird sehr hilfreich sein, da dieser behandelt werden müssen auf der client-Seite (also mit JavaScript). Eine Lösung, die ich denken kann, wäre, um eine Art timer, der würde teilen die user ein paar Minuten, bevor der server timeout.
Beim googeln über diesen, fand ich, Eric Pascarello ist Update User ' s Session mit AJAX blog-post (und die reloaded version Aktualisieren von Benutzer-Session mit Ajax - Runde 2), die genau beschreibt, wie eine Lösung (und eine
XMLHttpRequest
zum aktualisieren der Sitzung). Seine Ajax-Session-Management-Skript zur Verfügung hier.Entweder kann es einfach sein, servlet, spring-mvc oder spring-security auto-logout nicht möglich ist, ohne perfekte client-seitige Logik.
Angesichts der Antrag sowohl den Typ der Anfrage
Auto Abmelden muss sehr berechnet Logik. Ich präsentiere meinen autologout-Funktionalität Implementierung mit folgenden
Vorteile.
1. Keine zusätzlichen Aufruf/Anfrage verwendet wird, um dies zu erreichen. in Anbetracht auf die Leistung auswirken, wenn mehr als 10k aktiven Usern und extra Anrufe, um zu erreichen, auto logout.
2. Eine Online-Konfiguration mit tag.
3. Funktioniert einwandfrei, auch wenn der Benutzer öffnet mehrere Reiter oder mehrere Fenster.
4. Es gibt zu verstehen, die Sie vor 30 Sekunden der session-Invalidierung, also, wenn Sie gefüllt-Formular nicht eingereicht haben, können Sie halten, session alive(verlängern session durch einen Klick). So dass der Benutzer weniger wahrscheinlich zu verlieren nicht gesicherte Daten.
Nutzung
1. Gehören auto-logout-script in erforderlich JSP-Seiten wie unten angegeben.
2. Erstellen Sie eine JSP-Seite, autologout-Skript.jsp und fügen Sie folgenden code.
Hinweis: Keine Bearbeitung/Konfiguration erforderlich ist
3. Konfigurieren session-Parametern zu konfigurieren timeout-Einstellung
Hinweis: Konfigurieren Sie diese nach der session-Erzeugung. Sie implementieren können, HttpSessionListener sessionCreated Methode und die folgenden Konfiguration festzulegen, wie pro Ihre Anforderung.
4. Fügen Sie unter html für die Anzeige timer.
Hinweis: es kann verschoben werden, um autologout-Skript-Vorlage Seite, wenn Sie gut in CSS. Damit Sie vermeiden können, fügen Sie diese in jedem und jeder Seite.
Gehören bootstrap oder fügen Sie Ihre eigenen css.
Ist ein einfacher auto-logout Umsetzung.
Sie können download-Beispiel aus meinem github-repository
Autologout mit einfachen servlet-Beispiel
Autologout mit spring-security-java-Beispiel-Konfiguration
Autologout mit spring-security xml-Konfiguration-Beispiel
Logik Erklärt
Fall 1: beim laden der Seite"
Hier die Logik ist einfach, beim laden der Seite " set timer für Intervall equlas zu maxInactiveInterval. nach timeout redirect auf die login-Seite.
Fall 2: verfolgen Sie AJAX-Aufrufe
Jetzt überlege AJAX-Anfragen, die Sie verwenden können .ajaxStart() oder .ajaxComplete() callbacks von jquery so, dass, wenn ein ajax-request ausgelöst wird, setzen Sie den Abstand.
Fall 3: Tracking-multi-tab/- Fenster-Aktivität
Intertab Kommunikation erfolgt zu synchronisieren Zustand der einzelnen Register. Verwendet localStorage-on-change-Ereignis.
Einschränkungen/Verbesserungen erforderlich
1. Wenn die maximal zulässige Sitzung gehört, wenn session ist entnommen aus einem anderen system, AJAX-request fehl. Es muss behandelt werden, die Umleitung auf die login-Seite.
2. Verwenden ajaxStart() anstelle von ajaxComplete() exakte Synchronisation der Leerlaufzeit Werte zwischen server und browser.
Anforderungen
1. Jquery
Alternativen zur aktuellen Umsetzung gegenüber
1. Einstellung der Refresh-header in der http-Antwort. (Nicht Werke für AJAX-Anfragen)
Hält die session am Leben durch wiederholte AJAX-request. Spuren im Leerlauf Zeit und macht logout Anfrage nach timeout.
Kein Zweifel, es ist gut mit einfachen Logik. Aber ich will nur Tinte meinen Beobachtungen.