Schutz vor stillen Seiten-Reloads: 12h-Session, eigener Session-Cookie, Meldung statt Sofort-Reload

Session-Timeout auf 12 h erhöht, Cookie-Name PDFTOOL_SESSION gegen
JSESSIONID-Kollisionen anderer lokaler Java-Anwendungen, Tomcat-POST-Limit auf
30 MB für Canvas-Daten mit eingebetteten Bildern, Vaadin-Systemmeldungen mit
Bestätigung statt sofortigem Neuladen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-16 14:08:06 +02:00
co-authored by Claude Fable 5
parent 48a5831600
commit 9891a58fad
2 changed files with 54 additions and 0 deletions
@@ -0,0 +1,37 @@
package de.assecutor.pdftool.ui;
import com.vaadin.flow.server.CustomizedSystemMessages;
import com.vaadin.flow.server.ServiceInitEvent;
import com.vaadin.flow.server.VaadinServiceInitListener;
import org.springframework.stereotype.Component;
/**
* Verhindert das stille Neuladen der Seite durch Vaadin: Standardmäßig lädt
* Vaadin bei abgelaufener Session (z. B. nach einem Neustart der Anwendung)
* oder internen Fehlern die Seite sofort und ohne Hinweis neu — mitten in der
* Arbeit im Rechnungsgenerator. Stattdessen wird jetzt eine Meldung angezeigt;
* die Seite lädt erst neu, wenn der Benutzer die Meldung bestätigt.
*/
@Component
public class SystemMessagesConfiguration implements VaadinServiceInitListener {
@Override
public void serviceInit(ServiceInitEvent event) {
event.getSource().setSystemMessagesProvider(info -> {
CustomizedSystemMessages messages = new CustomizedSystemMessages();
messages.setSessionExpiredNotificationEnabled(true);
messages.setSessionExpiredCaption("Sitzung abgelaufen");
messages.setSessionExpiredMessage("Die Sitzung ist abgelaufen, z. B. durch einen Neustart der "
+ "Anwendung. Zum Fortfahren klicken — nicht gespeicherte Änderungen im "
+ "Rechnungsgenerator werden wiederhergestellt.");
messages.setInternalErrorNotificationEnabled(true);
messages.setInternalErrorCaption("Interner Fehler");
messages.setInternalErrorMessage("Es ist ein interner Fehler aufgetreten. "
+ "Zum Fortfahren klicken; die Seite wird danach neu geladen.");
return messages;
});
}
}
+17
View File
@@ -1,12 +1,29 @@
spring.application.name=pdf-tool
server.port=${SERVER_PORT:8083}
# Session erst nach 12 h Inaktivität verwerfen: Der Standard von 30 Minuten
# führte dazu, dass Vaadin nach längerer Untätigkeit (Tab inaktiv, Standby)
# die Seite neu lädt und ungespeicherte Canvas-Änderungen verloren gehen.
server.servlet.session.timeout=12h
# Eigener Name für den Session-Cookie: Der Standardname JSESSIONID gilt pro
# Hostname (nicht pro Port). Andere lokal laufende Java-Anwendungen auf
# demselben Rechner überschreiben sich sonst gegenseitig den Cookie, und die
# Session des PDF-Tools ist scheinbar sofort "abgelaufen".
server.servlet.session.cookie.name=PDFTOOL_SESSION
# Wird beim Build durch die Version aus der pom.xml ersetzt (Resource-Filtering)
pdftool.version=@project.version@
spring.servlet.multipart.max-file-size=25MB
spring.servlet.multipart.max-request-size=30MB
# Auch normale (Nicht-Multipart-)Requests bis 30 MB zulassen: Canvas-Daten mit
# eingebetteten Bild-Elementen können das Tomcat-Standardlimit von 2 MB
# überschreiten; ein abgelehnter Request führt im Browser sonst zu einem
# Vaadin-Kommunikationsfehler mit anschließendem Seiten-Reload.
server.tomcat.max-http-form-post-size=30MB
vaadin.launch-browser=false
# Zugangsdaten aus der .env-Datei im Projektverzeichnis laden (falls vorhanden)