2009-08-04 2 views
6

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

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

ответ

1

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

0

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

булево sessionInValid = httpServletRequest.getRequestedSessionId() = нуль & & httpServletRequest.isRequestedSessionIdValid()!;

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

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

1

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

2

У Richfaces есть свой механизм обработки ViewExpiredException, посмотрите на Richfaces docs.

+0

, но похоже, что это работает только для запросов ajax. – Inv3r53

+0

Это относится к * session * expiry, а не к истечению срока действия. – EJP

1

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