Wie führe ich eine authentifizierte AJAX-Anfrage aus, ohne das Sitzungstimeout der Tomcat zurückzusetzen?

8

Ich habe eine bestehende Grails-Webanwendung, die gerade produziert wird und eine 30-minütige Sitzungszeitüberschreitung hat. Wir betreiben Tomcat (tcServer).

Wenn ein Benutzer authentifiziert wird und auf bestimmten Seiten möchte ich regelmäßig Ajax-Abfragen an den Server senden, die dieses 30-Minuten-Zeitlimit nicht überschreiten - damit unser Sitzungszeitlimit nicht vereitelt wird.

Die Frage ähnelt diese unbeantwortete asp.net-Frage , aber keine der Antworten gibt es und dies im Java / Tomcat-Bereich.

Wie führe ich eine authentifizierte AJAX-Anfrage aus, ohne das Sitzungs-Timeout der Tomcat-Sitzung zurückzusetzen?

Gibt es eine Art Filter- oder URL-Matching-Mechanismus, mit dem ich Anfragen von der Verlängerung des Sitzungszeitlimits ausschließen kann?

    
Colin Harrington 29.01.2011, 00:21
quelle

2 Antworten

4

Ich würde mit einem Grails-Filter gehen, der etwas Ähnliches macht, was The-MeLLeR vorschlägt, ohne die unnötige Schleife durch alle Sitzungen:

%Vor%

Das Session-Timeout sollte abhängig von der Injektion sein oder anderweitig mit dem Wert in web.xml synchronisiert werden.

Es gibt zwei verbleibende Probleme. Einer ist der Fall, in dem eine Ajax-Anfrage, aber keine vorherige Nicht-Ajax-Anfrage (lastAccess == null) vorliegt. Die andere Möglichkeit besteht darin, den Browser auf eine Anmeldeseite umzuleiten oder wohin Sie auch gehen müssen, wenn nach 30 Minuten ohne Ajax-Aktivität eine Ajax-Anfrage gestellt wird. Sie müssten JSON oder eine andere Antwort rendern, die der Client überprüfen würde, um festzustellen, dass das Zeitlimit überschritten wurde, und eine clientseitige Weiterleitung durchführen.

    
Burt Beckwith 29.01.2011, 17:21
quelle
0

Nein, nicht möglich ...

Eine Option ist die folgende:

1) Erstellen Sie einen javax.servlet.Filter und speichern Sie den Zeitstempel des letzten (nicht ajax) Seitenaufrufs in der Sitzung.

2) Erstellen Sie einen javax.servlet.http.HttpSessionListener, um alle aktiven Sitzungen zu speichern.

3) Verwenden Sie einen Hintergrundthread, um alle abgelaufenen Sitzungen ungültig zu machen.

Beispielcode:

%Vor%     
The-MeLLeR 29.01.2011 13:20
quelle