Erweiterungen
This commit is contained in:
@@ -562,34 +562,55 @@ public final class MainView extends Main implements BeforeEnterObserver
|
|||||||
|
|
||||||
@ClientCallable
|
@ClientCallable
|
||||||
public void logout() {
|
public void logout() {
|
||||||
|
UI ui = UI.getCurrent();
|
||||||
|
|
||||||
try {
|
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(() -> {
|
executor.submit(() -> {
|
||||||
try {
|
try {
|
||||||
|
logger.info("Shutdown wird gestartet...");
|
||||||
shutdown();
|
shutdown();
|
||||||
|
logger.info("Shutdown erfolgreich abgeschlossen");
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
logger.error("Fehler beim Shutdown während Logout", 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) {
|
if (niederlassung != null) {
|
||||||
Application.activeNiederlassungen.remove(niederlassung.name());
|
Application.activeNiederlassungen.remove(niederlassung.name());
|
||||||
|
logger.info("Niederlassung {} aus aktiven Niederlassungen entfernt", niederlassung.name());
|
||||||
}
|
}
|
||||||
if (username != null) {
|
if (username != null) {
|
||||||
Application.activeUsers.remove(username);
|
Application.activeUsers.remove(username);
|
||||||
|
logger.info("Benutzer {} aus aktiven Benutzern entfernt", username);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Session invalidieren
|
// Session invalidieren und weiterleiten erst ganz am Ende
|
||||||
UI.getCurrent().getSession().getSession().invalidate();
|
ui.getSession().getSession().invalidate();
|
||||||
|
logger.info("Session invalidiert - Weiterleitung zur Login-Seite");
|
||||||
|
ui.getPage().setLocation("login");
|
||||||
|
|
||||||
// Direkte Browser-Weiterleitung ohne Vaadin Navigation
|
} catch (Exception ex) {
|
||||||
UI.getCurrent().getPage().setLocation("login");
|
logger.error("Fehler beim Logout UI-Update", ex);
|
||||||
|
// Fallback: Browser reload
|
||||||
|
ui.getPage().reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
logger.error("Fehler beim Logout", ex);
|
logger.error("Fehler beim Logout", ex);
|
||||||
// Fallback: Browser reload
|
// Fallback: Browser reload falls sofortiger Fehler
|
||||||
UI.getCurrent().getPage().reload();
|
ui.getPage().reload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user