Обработка просроченного ViewState в JSF и Richfaces - PullRequest
6 голосов
/ 04 августа 2009

У меня есть страницы регистрации серии, которые основаны друг на друге. Когда сеанс пользователя истекает, у меня есть Слушатель, который очищает все на сервере, и это прекрасно работает. Но если пользователь пытается сделать что-то еще, я просто хочу перенаправить их обратно на первую страницу серии. Тем не менее, мой фильтр, кажется, не работает правильно. Я продолжаю получать javax.faces.application.ViewExpiredException

Какова лучшая практика для обработки этого исключения? Я не могу просто обработать файл web.xml, потому что это слишком глобально. Кроме того, страница ошибки отображается из некоторого кода JSF - мне кажется, мне нужно уловить, что это происходит с использованием PhaseListener, поэтому исключение не возникает в первую очередь, но я не смог найти хорошую модель как это сделать. Есть идеи?

Ответы [ 5 ]

2 голосов
/ 18 августа 2009

Richfaces имеет свой собственный механизм для обработки исключений ViewExpiredException, посмотрите Документы Richfaces .

1 голос
/ 31 августа 2009

Способ, которым я занимался в прошлом, заключается в использовании слушателя, который проверяет поле в управляемом сессионном компоненте. Если время сеанса пользователя истекло, слушатель очищает mbean и помечает пользователя как не вошедшего в систему. Каждый запрос отправляется через слушателя, и если требования не выполняются, то пользователь вынужден покинуть сайт. Я никогда не получаю ViewExpiredException в моем журнале. Единственное время, когда это исключение произошло, - это если сервер был перезапущен, и пользователь запрашивает страницу при наличии предыдущего активного сеанса.

1 голос
/ 18 августа 2009

Способ, которым я справляюсь, состоит в том, чтобы добавить фильтр в файл web.xml, сопоставленный только с URL-адресами, которые вы хотите отслеживать. Этот фильтр проверяет, истек ли сеанс, и затем перенаправляет на страницу входа, если это так. Он должен работать, если фильтр запускается до запуска любого кода JSF.

1 голос
/ 05 августа 2009

Я думаю, что вы правильный трек с фазовым слушателем. По сути, настроить что-то в сессии на первой странице. Затем в фазе слушателя ищите значение в сеансе. Если он не выходит, сделайте перенаправление. Хитрость заключается в том, чтобы сделать это на ранних этапах процесса прослушивания фазы. Не уверен точно, где в процессе ваш фазовый слушатель выдает исключение.

0 голосов
/ 06 августа 2009

Вы можете проверить, является ли ваша сессия недействительной или нет

логическое sessionInValid = httpServletRequest.getRequestedSessionId () ! = null && ! HttpServletRequest.isRequestedSessionIdValid ();

Здесь логическая переменная sessionInValid вернет true, если сеанс недействителен каким-либо образом.

Вы можете добавить это в фильтр или прослушиватель, а затем настроить это в своем файле web.xml.

...