ist es möglich, gleichzeitige Änderungen einer Sitzung zu verhindern, wenn mehrere Load-Balanced-Instanzen einer Anwendung ausgeführt werden?Spring-Sitzung - gleichzeitige Änderung der Sitzung verhindern
Kontext: Mehrere Tomcats, die alle die gleiche Anwendung ausführen. Die Anwendung verwendet Spring-Sitzung, um die Sitzungen in einem Redis-Cluster zu speichern. Ein Load Balancer verteilt eingehende Anfragen an einen der Tomcats (nicht-sticky). User hits Button, Tomcat 1 verarbeitet die Anfrage sehr langsam (Performance-Problem oder was auch immer). Der Benutzer drückt den Button erneut, tomcat 2 ist viel schneller und antwortet erfolgreich. Der Benutzer fährt mit den folgenden Seiten fort. Tomcat 1 beendet die allererste Anfrage und überschreibt die Sitzung - die Daten aller vorhergehenden Seiten gehen verloren.
Eine Lösung wäre, die Sitzung zu sperren. Dadurch kann Tomcat 2 die gleichzeitige Änderung erkennen und mit einem Fehler antworten (viel besser als einen inkonsistenten Zustand zu erhalten).
Thx viel AB
Thx viel Vedran. Einige Anmerkungen: Das Deaktivieren der Schaltfläche löst das Problem nicht, da ein Benutzer immer noch "F5" drücken oder mehrere Browserfenster verwenden kann. Ich habe keinen geeigneten Mechanismus gefunden, um mein Problem in irgendeinem SessionRepository zu behandeln - jedenfalls löst das RedisOperationsSessionRepository das Problem definitiv nicht. Die Verwendung eines CSRF-Schutz-Tokens ist eine sehr interessante Idee, um gleichzeitige Änderungen zu erkennen. Ich werde es versuchen. – user7252656