doFilter не вызывается - PullRequest
       1

doFilter не вызывается

8 голосов
/ 07 сентября 2010

Не могли бы вы помочь проверить, почему doFilter не вызывается

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<filter>
<filter-name>roseFilter</filter-name>
<filter-class>net.paoding.rose.RoseFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>roseFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
</web-app>

подпись класса:

import org.springframework.web.filter.GenericFilterBean;
public class RoseFilter extends GenericFilterBean {

404 возвращается при вызове http://localhost:8080/hello/world, Я установил точки останова на doFilter, кажется, doFilter не вызывается? (я пробовал tomcat 6.0.18, 6.0.29, jdk1.6)

Ответы [ 2 ]

25 голосов
/ 07 сентября 2010

Фильтр не будет вызываться, когда:

  1. Класс фильтра отсутствует в пути к классам и / или не может быть загружен или создан.Однако вы должны были заметить это в журналах запуска сервера.Решение должно быть найдено на основе интерпретации исключений / ошибок, обнаруженных в журналах сервера.

  2. В цепочке еще работает еще один фильтр, который не вызывает FilterChain#doFilter(), а точнее RequestDispatcher#forward() или include(), в результате чего последующие фильтры в цепочке были полностью пропущены (когда они не прослушивают FORWARD или INCLUDE dispatchers; они по умолчанию слушают только REQUEST dispatcher).Решение состоит в том, чтобы либо исправить неправильный фильтр, либо добавить <dispatcher>FORWARD</dispatcher> и т. Д. Соответственно, либо изменить порядок объявлений фильтра в web.xml, чтобы ваш новый фильтр пришел до другого фильтра (вам, в свою очередь, нужен толькочтобы убедиться, что ваш новый фильтр правильно использует FilterChain#doFilter() :)).

  3. URL-адрес запроса неверен.Вы использовали http://localhost:8080/hello/world. Если фильтр прослушивает /*, это означает, что контекст веб-приложения должен быть ROOT или, по крайней мере, /hello.Проверьте свой контекст веб-приложения.Я бы просто повторил попытку с URL-адресом, который указывает на действительный JSP / Servlet в том же веб-приложении, которое генерирует ответ не-404.Фильтр тогда тоже вызывается?

0 голосов
/ 07 сентября 2010

Как выглядит веб-запрос? Можете ли вы попробовать изменить свой URL-шаблон на *. Jsp вместо / *? Если вы используете что-то отличное от чистого JSP, измените его на расширение окончания запроса (например, для Struts это обычно * .do).

...