У меня есть веб-приложение, развернутое в настоящее время на Wildfly 22, с использованием JSF 2.3 и OpenJDK 11. В настоящее время я переношу страницу входа с j_security_check на программный вход, следуя примеру BalusC в этом посте:
Выполнение аутентификации пользователя в Java EE / JSF с использованием j_security_check
Я не публикую код входа, потому что он в точности как сообщение BalusC.
Процесс входа в систему работает нормально, за исключением случаев, когда истекает время ожидания сеанса на странице входа. Другими словами, когда пользователь запрашивает защищенный ресурс, отображается страница входа в систему. Если сеанс истекает до того, как форма входа будет отправлена, выдается ViewExpiredException
и пользователю предоставляется сообщение об ошибке.
Я понимаю, что это ожидаемое поведение, однако это не желаемая ситуация для конечного пользователя. Мне удалось минимизировать эту ситуацию с помощью ViewExpiredExceptionHandler
OmniFaces. Таким образом, когда выдается ViewExpiredException
, обработчик OmniFaces перехватывает его и перенаправляет на текущий URL-адрес со строкой запроса. Другими словами, пользователь пытается войти в систему после истечения сеанса, и страница входа снова отображается пользователю.
Мне удалось использовать #{flash['org.omnifaces.view_expired'] eq true}
, чтобы пользователю было представлено приятное сообщение, объясняющее, что произошел тайм-аут.
Есть ли способ обойти эту ситуацию и выполнить успешный вход в систему даже по истечении сеанса, чтобы пользователю не приходилось дважды вводить свои учетные данные?
Спасибо за вашу помощь!