У меня есть страница входа JSF, использующая аутентификацию формы. Я вхожу в систему, вызывая HttpServletRequest.login(имя пользователя, пароль). Выход из системы выполняется путем сначала вызова ExternalContext.invalidateSession(), а затем вызова HttpServletRequest.logout() для текущего пользователя.
Мой план состоит в том, чтобы отслеживать вошедшего в систему пользователя в списке области приложения, добавляя в список каждый раз, когда пользователь входит в систему, и удаляя из списка, когда пользователь выходит из системы.
У меня есть две проблемы с этим подходом:
Если пользователь, который уже вошел в систему, пытается снова войти в систему без предварительного выхода из системы, я хочу аннулировать существующий сеанс и выполнить некоторую очистку. Как получить доступ к сеансу для данного вошедшего в систему пользователя? Я также мог бы использовать эту функцию для принудительного выхода из системы некоторых пользователей.
Если сеанс истекает (например, тайм-аут), я хочу удалить пользователя из списка вошедших в систему пользователей. Как прослушать истечение сеанса?