2013-08-30 2 views
3

У меня проблема с фильтром проверки подлинности. Когда фильтр переадресовывается на страницу входа в систему, на предыдущей странице отображается вся предыдущая страница (главная страница). Если я перехожу на страницу входа вручную, он отлично работает.перенаправление фильтра сервлета, URL-адрес не изменен

Вот мой фильтр:

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

+0

Если у вас уже есть доступ к странице, то 'getSession' всегда будет возвращать« не новый сеанс », что приведет к первому случаю вашего оператора' if'. – LaurentG

+0

Я думаю, что операторы 'if' работают нормально, потому что они перенаправляют правильные, единственная проблема заключается в том, что URL-адрес не изменен на«/login ». –

+0

OK, есть ли какие-либо другие фильтры сервлетов перед этим фильтром? Никакие фильтры не должны были писать ответ, иначе 'sendRedirect' не может работать. – LaurentG

ответ

0

Какова ценность loginURL, которую вы передаете. Отправьте относительный путь.

+0

Значение верное, это «/ WebApp/login " –

+0

[http://stackoverflow.com/questions/2190733/java-servlet-filter-redirect-problem?rq=1](http://stackoverflow.com/questions/2190733/java-servlet-filter-redirect- проблема? rq = 1) Я обнаружил, что я должен перенаправить на страницу входа напрямую. –

+0

redirect to /login.jsp –

2

Изменение URl в браузере не зависит от фильтра, но зависит от того, как вы вызываете страницу/сервлет. Вы можете позвонить сервлетов/JSP двумя способами

  1. RequestDispatcher: Передает управление на другой по той же просьбой (Same URL)

  2. Send Redirect: Инициирует новый запрос (New URL)

    Примечание: Все, что фильтр будет делать это проверка для запроса

-1

У меня была точно такая же проблема. Реальная проблема заключается в том, что я и вы оба забыли добавить следующую строку:

response.setContentType("text/html"); 

После добавления этой строки моя редирект работает нормально. До этого мой сервлет останется на той же странице с пустой страницей (потому что ничего не было записано в поток oputput ответа).

Надеюсь, это поможет другим, у кого возникла эта проблема. Мне потребовались несколько минут, прежде чем проверить эту возможность.

Смежные вопросы