Heim  >  Artikel  >  Java  >  So lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist

So lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist

PHPz
PHPznach vorne
2023-05-22 13:49:502897Durchsuche

Problem:

Beim heutigen Projekt ist ein Einstellungs-Timeout-Problem aufgetreten und die application.properties-Änderungen von SpringBoot2 wurden nie wirksam.

Lösung:

  • 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.

1. Ändern Sie die Konfigurationsdatei gemäß dem Beitrag im Internet (wenn es sich um einen Jar-Start handelt, wird sie wirksam) wie folgt:

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:

  • 'D' - Tag

    # 🎜🎜#
  • 'H' - Stunden #
  • Jede Einheit muss mit einer Zahl beginnen und die Reihenfolge von Stunden, Minuten und Sekunden darf nicht durcheinander gebracht werden. Zum Beispiel: PT2H3M2S ist gleich -PT-2H-3M-2S.
  • 2. Legen Sie das Sitzungszeitlimit von Tomcat fest.

    1) Ändern Sie im conf-Verzeichnis von Tomcat die Datei servler.xml:
<Context path="/abtest" docBase="/abtest"  
  defaultSessionTimeOut="3600" isWARExpanded="true"  
  isWARValidated="false" isInvokerEnabled="true"  
  isWorkDirPersistent="false"/>
  • 2) In das Projekt web.xml ändern:

    <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 führt zum Ausfall der Spring-Sitzung.

    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.

    Fügen Sie den Informationen zufolge Schritt für Schritt eine Frühlingssitzung zum Projekt hinzu. Das Einzelknotenprojekt lief erfolgreich und ohne Fehler und die Sitzung wurde erfolgreich in Redis geschrieben.

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

    ntpdate -u ntp.api.bz: Netzwerkzeitsynchronisierungsbefehl

    ntp häufig verwendeter Server :

    #🎜 🎜#China National Time Service Center: 210.72.145.44

    NTP-Server (Shanghai): ntp.api.bz

    Das 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!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen