Проблема скорее возникает, если кто-то не вышел из системы, но его сеанс истекает.Чем у меня нет возможности проверить, вошел ли он в систему.
У вас есть возможность реализовать HttpSessionListener
:
@WebListener
public class YourUserSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent event) {
// NOOP.
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
YourUser yourUser = event.getSession().getAttribute("yourUser");
if (yourUser != null) {
yourUser.logout(); // Update DB.
}
}
}
Где YourUser
- это управляемый вами компонент JSF в рамках сеанса, представляющий вошедшего в систему пользователя.
Или, когда вы находитесь в JSF2 (как подтверждает история ваших вопросов), введите @PreDestroy
в методе выхода из системы в управляемом компоненте JSF в рамках сеанса, представляющем зарегистрированного пользователя:
@ManagedBean
@SessionScoped
public class YourUser {
// ...
@PreDestroy
public void logout() {
// Update DB.
}
}
Таким образом, метод будет вызван до того, как компонент будет уничтожен по истечении сеанса.