Аутентификация на основе формы не перенаправляет на страницу входа

Я использую аутентификацию на основе форм в web.xml в Tomcat.

<login-config> 
<auth-method>FORM</auth-method> 
<realm-name>Example Form-Based Authentication Area</realm-name> 
<form-login-config> 
<form-login-page>/LoginServlet</form-login-page> 
<form-error-page>/LoginServlet</form-error-page> 
</form-login-config> 
</login-config>

В моем WebApp у меня есть страница Action.jsp и фильтр (MyFilter.java). Я печатаю значение имени пользователя и идентификатора сеанса в MyFilter. Когда время сеанса истекает, страница action.jsp открывается, а в журнале фильтра имя пользователя отображается как нулевое. Но он не перенаправляет на страницу входа. В чем может быть проблема?

LoginServlet просто перенаправляет на страницу входа.

 response.sendRedirect(response
              .encodeRedirectURL("/WebFwCore/web/pages/main.jsp"));

и в фильтре я печатаю

 request.getRemoteUser();
    request.isUserInRole('something');

который становится нулевым и в web.xml

               <web-resource-name>View pages</web-resource-name>
                        <url-pattern>/jsp/ann/ann_main.jsp</url-pattern>
                        <url-pattern>/jsp/ann/ann_tcu.jsp</url-pattern>
                        <url-pattern>/jsp/ann/import_ann_files.jsp</url-pattern>
                        <url-pattern>/jsp/dtmf/dtmf.jsp</url-pattern>
                        <url-pattern>/jsp/languagetah/languagetag.jsp</url-pattern>
                        <url-pattern>/jsp/languagetah/action.jsp</url-pattern>
                        <url-pattern>/jsp/languagetah/languagetag_load_result.jsp</url-pattern>
                        <url-pattern>/jsp/languagetah/languagetag_load_error_detail.jsp</url-pattern>
                        <url-pattern>/jsp/tone/tone.jsp</url-pattern>
                </web-resource-collection>
        <auth-constraint>
                <role-name>fsNetworkingView</role-name>
                <role-name>fsNetworkingManage</role-name>
                <role-name>fsWebUIAllowAll</role-name>
        </auth-constraint>

person sabu    schedule 06.02.2013    source источник
comment
какой у вас код проверки сеанса? и код проверки авторизации в LoginServlet   -  person TheWhiteRabbit    schedule 06.02.2013
comment
как сессия связана с запросом? пользователь может войти в систему с новым запросом, для которого тайм-аут сеанса!!   -  person TheWhiteRabbit    schedule 06.02.2013
comment
@TechExchange Пожалуйста, смотрите мой комментарий к сообщению ниже. Я не использую фильтр для аннулирования сеанса. Просто для проверки я использовал там фильтр.   -  person sabu    schedule 06.02.2013
comment
вы пытаетесь извлечь значение из сеанса, который не существует, но роль пользователя существует в request — найдите способ связать запрос с сеансом или просто поставьте галочку   -  person TheWhiteRabbit    schedule 06.02.2013
comment
ok фильтр используется только для подтверждения того, что сеанс недействителен. получив имя пользователя, которое становится нулевым. Больше ничего не служит. Даже если я удалю фильтр, он откроет страницу, но пользователь будет нулевым. Скорее он должен был быть перенаправлен на /loginServlet. что происходит с другими страницами приложения. но только на этой странице я застрял.   -  person sabu    schedule 06.02.2013


Ответы (1)


В LoginServlet

  • проверить сеанс от Request с помощью request.getSession(false);

  • если сеанс нулевой, перенаправить на страницу входа

  • Всегда проверяйте сеанс перед проверкой запроса, потому что запросы могут быть свежими (вместе с аутентификацией), но более ранний запрос, к которому привязан сеанс, мог быть просрочен.

  • Или вы можете использовать прослушиватель сеанса, чтобы отслеживать истечение сеанса и действовать соответствующим образом в соответствии с требованиями приложения.

person TheWhiteRabbit    schedule 06.02.2013
comment
но не следует формировать аутентификацию, она должна уже позаботиться об этом. Если сеанс истекает, он автоматически перенаправляется на страницу, указанную в ‹form-login-page›/LoginServlet‹/form-login-page›. И это работает для всех других страниц отлично. если я пытаюсь открыть другую страницу из того же WebApp, она перенаправляется на loginServlet. Но только на одной странице. - person sabu; 06.02.2013
comment
пользователь в роли - "Да", вы помните его существующую сессию - "Нет" - person TheWhiteRabbit; 06.02.2013
comment
извините не смог подписаться на вас.. :( - person sabu; 06.02.2013