2012-01-19 2 views
1

У меня проблема в определении страницы тайм-аута сеанса и страницы можно перемещаться непосредственно ...аутентификации веб-страницы в JSF

пользователь сначала заполнить форму и отправляет ее на основе поиска он приземлится на информацию стр. почему-то, если он пытается ввести URL-адрес информационной страницы вместо того, чтобы проходить через страницу поиска, как я могу его ограничить? Я попытался использовать индикатор varaible в сеансе, но это противоречит таймауту сеанса ... Как я могу отличить, если это тайм-аут сеанса или прямая навигация? может кто-то пролить свет на это и направить меня в правильном направлении?

ответ

0

Вы можете проверить на стороне сервера тайм-аут сеанса следующим образом:

if (request.getRequestedSessionId() != null && !request.isRequestedSessionIdValid()) { 
    // The session has been timed out (or a hacker supplied a fake cookie). 
} 

request находится здесь HttpServletRequest, который вы можете получить в контексте JSF из ExternalContext#getRequest() или, на самом деле лучше, внутри Filter, просто downcasting аргумент ServletRequest.

Как совершенно другая альтернатива, вы также можете ввести опрос ajax с течением времени как «heartbeat», чтобы сеанс никогда не заканчивался, пока пользователь открывал страницу в браузере.

+0

Благодарим за предложение ... Я делал это в фильтре, иначе в случае вышеуказанного шага я проверял сеанс из запроса, если он равен нулю. Я пытаюсь перенаправить его на домашняя страница, но я получаю ответ, уже была зафиксирована ошибка ... – kumar

+0

Затем вы делаете это в неподходящий момент в фильтре или не понимаете, как работает код Java в целом и ожидает, что вызов метода с определенным именем будет волшебным пропустите остаток кода. См. Также http://stackoverflow.com/questions/2123514/java-lang-illegalstateexception-cannot-forward-after-response-has-been-committe/2125045#2125045 – BalusC

+0

Еще раз спасибо BalusC, что вы указали мне в правильном направлении. .. я отсутствовал и вернулся ... – kumar

1

С моей точки зрения ваш вопрос: Пользователь не должен иметь доступ к определенной странице, скажем, Page1.xhtml напрямую. Сначала он должен заполнить форму на странице2.xhtml и затем должен быть направлен на эту страницу самим сервером.

Решение:

  1. Вы можете поместить page1.xhtml внутри веб-инф каталог вашего веб-приложение, которое будет ограничивать прямой доступ к веб-странице.

  2. Вы можете использовать тег securityConstraint для web.xml и использовать защиту контейнера для ограничения прямого доступа.

+0

Спасибо за ответ ... моя проблема была решена, установив мой фильтр сеанса правильно ... я еще не получил возможность взглянуть на безопасность контейнера ... я рассмотрю это ... – kumar