diff --git a/src/main/java/de/assecutor/pdftool/ui/SystemMessagesConfiguration.java b/src/main/java/de/assecutor/pdftool/ui/SystemMessagesConfiguration.java new file mode 100644 index 0000000..73c550c --- /dev/null +++ b/src/main/java/de/assecutor/pdftool/ui/SystemMessagesConfiguration.java @@ -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; + }); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 304b6ee..fe1f038 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -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)