Erweiterungen
This commit is contained in:
@@ -562,34 +562,55 @@ public final class MainView extends Main implements BeforeEnterObserver
|
||||
|
||||
@ClientCallable
|
||||
public void logout() {
|
||||
UI ui = UI.getCurrent();
|
||||
|
||||
try {
|
||||
// Cleanup in separatem Thread ohne UI-Navigation
|
||||
// Wartemeldung anzeigen
|
||||
var dialog = showWaitDialog("Emulator wird heruntergefahren, bitte warten...");
|
||||
|
||||
// Cleanup in separatem Thread - KEINE sofortige Session-Manipulation
|
||||
executor.submit(() -> {
|
||||
try {
|
||||
logger.info("Shutdown wird gestartet...");
|
||||
shutdown();
|
||||
logger.info("Shutdown erfolgreich abgeschlossen");
|
||||
} catch (Exception ex) {
|
||||
logger.error("Fehler beim Shutdown während Logout", ex);
|
||||
}
|
||||
});
|
||||
} finally {
|
||||
// UI-Update erst NACH vollständigem Shutdown
|
||||
ui.access(() -> {
|
||||
try {
|
||||
logger.info("Starte Logout-Cleanup nach Shutdown");
|
||||
dialog.close();
|
||||
|
||||
// Session cleanup sofort
|
||||
// Session cleanup erst nach Shutdown
|
||||
if (niederlassung != null) {
|
||||
Application.activeNiederlassungen.remove(niederlassung.name());
|
||||
logger.info("Niederlassung {} aus aktiven Niederlassungen entfernt", niederlassung.name());
|
||||
}
|
||||
if (username != null) {
|
||||
Application.activeUsers.remove(username);
|
||||
logger.info("Benutzer {} aus aktiven Benutzern entfernt", username);
|
||||
}
|
||||
|
||||
// Session invalidieren
|
||||
UI.getCurrent().getSession().getSession().invalidate();
|
||||
// Session invalidieren und weiterleiten erst ganz am Ende
|
||||
ui.getSession().getSession().invalidate();
|
||||
logger.info("Session invalidiert - Weiterleitung zur Login-Seite");
|
||||
ui.getPage().setLocation("login");
|
||||
|
||||
// Direkte Browser-Weiterleitung ohne Vaadin Navigation
|
||||
UI.getCurrent().getPage().setLocation("login");
|
||||
} catch (Exception ex) {
|
||||
logger.error("Fehler beim Logout UI-Update", ex);
|
||||
// Fallback: Browser reload
|
||||
ui.getPage().reload();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
} catch (Exception ex) {
|
||||
logger.error("Fehler beim Logout", ex);
|
||||
// Fallback: Browser reload
|
||||
UI.getCurrent().getPage().reload();
|
||||
// Fallback: Browser reload falls sofortiger Fehler
|
||||
ui.getPage().reload();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user