Проблема перенаправления фильтра Java-сервлетов - PullRequest
5 голосов
/ 03 февраля 2010

У меня проблема с моим фильтром аутентификации. Когда фильтр перенаправляет на страницу входа, изображения не отображаются в JSP входа. Однако, если я захожу на страницу входа вручную после входа в систему, отображаются изображения.

Я не понимаю, почему это происходит! Я ценю любую помощь. : -)

AuthFilter:

if (authorized == null && path.indexOf("Auth") == -1 && path.indexOf("Login") == -1 ) {
        httpResponse.sendRedirect("Login");  
        return;  
} else {  
        chain.doFilter(request, response);  
}

Логин сервлет:

// Just using a servlet in case I want more data sent to the jsp
Dispatcher.dispatch("views/login.jsp", request, response);

login.jsp:

<img src="images/logo.png" />

В противном случае jsp является "нормальным", присутствуют все необходимые HTML-теги. Папка «images» находится в стандартной папке «web» проекта вместе со всеми остальными jsp и javascripts.

Заранее спасибо за любую помощь. :)
- Stian

Ответы [ 2 ]

7 голосов
/ 03 февраля 2010

Это из-за относительных путей.

  • ваш Login находится в корне контекста
  • Ваши изображения, вероятно, /views/images/
  • при пересылке браузер знает только запрошенный URL.

Поэтому при пересылке изображения ищутся по /images (потому что они относятся к текущему адресу) вместо /views/images/

Как это решить. Два варианта:

  • не пересылайте с вашего сервлета; вместо перенаправления
  • не перенаправлять на сервлет из фильтра; перенаправить на страницу входа напрямую

Обновление: Убедитесь, что на изображения НЕ влияет фильтр. два варианта:

  • они не должны совпадать с шаблоном фильтра
  • перенаправление не должно происходить для .png, .jpeg, .css и т. Д. В фильтре. проверьте это с request.getRequestURI()
2 голосов
/ 03 февраля 2010

Может ли быть так, что ваш фильтр также применяется к запросам изображений и перенаправляет запрос от logo.png до login.jsp?

Если это так, вы можете настроить filter-mapping в web.xml.

...