- java: 11
- Spring: 5.3.30
- Управление сеансом: Spring-session-jdbc для хранения сеансов в базе данных MySQL. /> Front-End Project: < /strong> < /p>
java: 11 < /li>
vaadin: 23.3.11 < /li>
< /ul>
worning a strong> < /p>
В конечную точку моего бэкэнда/сеанса/старта из ui vaadin. /> Срок действия сеанса бэкэнд истекает, что подтверждено моей SessionEventListener, регистрировав SessionDestroyEdevent и из базы данных. Vaadinsession.getCurrent (). Setattribute).
Пример:
Код: Выделить всё
Button pingButton = new Button("Ping UI", e -> {
UI ui = UI.getCurrent();
ui.access(() -> {
try {
VaadinSession.getCurrent().setAttribute("ping", "pong");
Notification.show("Ping successful");
} catch (Exception ex) {
Notification.show("Session expired");
}
});
});
Ваадиновый пользовательский интерфейс должен обнаружить сеанс с истекшим сроком действия и отображать «наложение с истечением сеанса». My Pingbutton's Code vaadinsession.getCurrent (). SetatTribute («Ping», «pong») успешно выполняется, и показано «успешное уведомление Ping». Попробовал
Я понимаю, что механизм сердцебиения Ваадина может сохранить основную сеанс HTTP. Я попробовал несколько подходов к синхронизации тайм -аутов, но ни один из них не работал, как и ожидалось. RequestHandler называется, но httprequest.getSession (false), похоже, не возвращается нулевым даже после истечения весеннего сеанса. Это заставляет меня верить, что объект сеанса контейнера сервлета все еще присутствует, или мой обработчик не выполняется в нужное время.import com.vaadin.flow.server.*;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@WebListener
public class CustomServiceInitListener implements VaadinServiceInitListener {
@Override
public void serviceInit(ServiceInitEvent event) {
event.addRequestHandler((vaadinSession, request, response) -> {
VaadinServletRequest servletRequest = (VaadinServletRequest) request;
HttpServletRequest httpRequest = servletRequest.getHttpServletRequest();
HttpSession httpSession = httpRequest.getSession(false);
if (httpSession == null) {
vaadinSession.close();
return true;
}
return false;
});
}
}
< /code>
Попытка 2: Настройка тайм -аута сеанса Vaadin в web.xml. < /p>
Я удалил пользовательский запрос и попытался использовать параметры инициализации сервлета для управления временем сеанса Vaadin, нацелившись на то, чтобы сделать его более коротким, чем Timeout. Проект:
vaadin
com.vaadin.flow.server.VaadinServlet
session-timeout
25
closeIdleSessions
true
1
vaadin
/*
< /code>
Даже при этой конфигурации сеанс Ваадина не истекает после 25 секунд неактивности. < /p>
Я подозреваю, что существует фундаментальный аспект того, как взаимодействуют весенняя сеанс и сессия Vaadin, я упускаю, особенно в непрессосной среде с использованием web.xml и spring-session-jdbc. /P> Perly-jdbc. /P> p> Pructy-jdbc. Мое приложение для потока Ваадин 23, чтобы гарантировать, что срок действия ваадинессии истекает, как только истекает сеанс Spring-Session-JDBC, запуская сеанс по умолчанию «UI?
Подробнее здесь: https://stackoverflow.com/questions/797 ... on-expires