Heim >Java >javaLernprogramm >So lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist
Beim heutigen Projekt ist ein Einstellungs-Timeout-Problem aufgetreten und die application.properties-Änderungen von SpringBoot2 wurden nie wirksam.
Der von Spring Boot verwendete eingebettete Container wird von den server.*-Eigenschaften gesteuert. Spring Boot erstellt eine Instanz des Servlet-Containers mithilfe einer der ServletWebServerFactory-Instanzen. Diese Klassen verwenden server.*-Attribute, um verwaltete Servlet-Container (wie Tomcat, Jetty usw.) zu konfigurieren.
Wenn die Anwendung in eine WAR-Datei gepackt und auf einer Tomcat-Instanz bereitgestellt wird, können die server.*-Attribute nicht verwendet werden. Diese gelten nicht, da der vorgefertigte Servlet-Container verwendet werden kann (da der Dienst remote ausgeführt wird). Daher führt die Bereitstellung auf einem Remote-Tomcat dazu, dass die server.*-Eigenschaften unbrauchbar werden.
server: servlet: session: timeout: PT1H # 1小时过期 cookie: max-age: PT1H # 1小时过期
Erläuterung: PT1H bedeutet: Setzen Sie die Sitzungsablaufzeit auf 1 Stunde.
Erweiterung: Duration
Die setTimeouot-Methode wird durch Anzeigen des Springboot-Quellcodes gefunden. Hier muss die Instanz von Duration übergeben werden.
public void setTimeout(Duration timeout) { this.timeout = timeout; }# 🎜🎜#Duration ist neu in Java8 und wird hauptsächlich zur Berechnung von Datumsunterschieden verwendet. Duration wird als endgültig deklariert und ist threadsicher. Wenn Sie eine Zeichenfolge konvertieren, ähnelt dies der Formatierungsmethode von SimpleDateFormat Dauer Zeichenfolgen ähneln Zahlen, die positiv und negativ sind: Der Standardwert ist positiv und negativ ist '-' Am Anfang, gefolgt von 'PT', gefolgt von Zeitbuchstaben:
<Context path="/abtest" docBase="/abtest" defaultSessionTimeOut="3600" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/>
<session-config> <session-timeout>20</session-timeout> </session-config>3) Ändern Sie
session.setMaxInactiveInterval(30*60);im Programm, lesen Sie bitte zuerst die roten Wörter oben und überprüfen Sie sie der Reihe nach . . Testcode:
@RestController @RequestMapping("/valid-time") public class TestController { @GetMapping("/test") public String validTime(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); int sessionTime = session.getMaxInactiveInterval(); return new StringBuilder("sessionTime=").append(sessionTime).toString(); } }
Nicht synchronisierte Zeit auf dem Linux-Server Ursachen für die große Fehlergrube der Frühlingssitzung wurde als Session-Sharing-Lösung ausgewählt.
Nachdem ich die technische Lösung bestätigt hatte, suchte ich im Internet nach vielen Informationen über die Frühlingssitzung. Nachdem ich sie gelesen und keine Fehler von früheren Leuten gefunden hatte, begann ich daran zu arbeiten.
Der Redis-Installationsprozess wird ignoriert.Dann habe ich sicherheitshalber Nginx auf meinem Computer installiert und 3 Tomcats bereitgestellt. Alles sah perfekt aus und die Sitzungsfreigabe zwischen mehreren Knoten wurde abgeschlossen. Bisher sind alle vorbereitenden Vorbereitungen abgeschlossen und es bleibt nur noch der letzte Schritt.
Der Albtraum beginnt ...
Stellen Sie alle Knoten online bereit und öffnen Sie dann den Browser, um erfolgreich auf die Anwendung zuzugreifen. Natürlich können wir nicht einfach damit aufhören An dem Punkt, an dem wir sehen, dass die Seite fertig ist, muss ich mich sowieso anmelden, also...
Dann... Ich habe das Benutzerpasswort unzählige Male eingegeben und dazu aufgefordert Die Anmeldung war erfolgreich, aber das Endergebnis wurde immer noch abgelehnt, o(╥﹏╥)o
Der nächste Schritt sind unzählige Grubenfüllfahrten
Schauen Sie sich das Protokoll an ...
Sehen Sie sich verschiedene Anfrageanfragen an ……
Ich vermute, dass es in der Frühjahrssitzung einen FEHLER gibt…
Ich habe sogar Remote DEBUG aktiviert Debuggen im Modus, und schließlich habe ich im universellen DEBUG-Modus festgestellt, dass beim Abrufen einer Sitzung im Frühling
zunächst ermittelt, ob die Sitzung abgelaufen ist Systemzeit und vergleichen Sie sie mit der Ablaufzeit der Sitzung. Wenn die aktuelle Zeit kürzer als die Ablaufzeit ist, identifizieren Sie die Sitzung.Als ich das sah, verspürte ich sofort ein Gefühl der Erleuchtung und das kleine Universum brach hier endlich aus.
Nima—> Alle erworbenen Sitzungen waren abgelaufen, und dann ... dann ... bin ich natürlich schnell losgelaufen, um die Serverzeit zu überprüfen, also ... habe ich geweint )o, es stellt sich heraus. Verdammt, du hast mich ausgetrickst...
Zur Erinnerung an diesen Boxenstopp poste ich diesen Artikel
Zeichne auch den Linux-Server auf Zeitsynchronisierung Datumsbefehl:Datum: Aktuelle Uhrzeit anzeigen, die Ergebnisse sind wie folgt: Di 4. März 01 :36:45 CST 2017
date -s 09:38:40: Stellen Sie die aktuelle Uhrzeit ein, das Ergebnis ist wie folgt: Tue Mar 4 09:38:40 CST 2017
#🎜 🎜#ntpdate-Befehl: # 🎜🎜#
#🎜 🎜#China National Time Service Center: 210.72.145.44
NTP-Server (Shanghai): ntp.api.bzDas obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!