Не могли бы вы помочь проверить, почему 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)
Фильтр не будет вызываться, когда:
Класс фильтра отсутствует в пути к классам и / или не может быть загружен или создан.Однако вы должны были заметить это в журналах запуска сервера.Решение должно быть найдено на основе интерпретации исключений / ошибок, обнаруженных в журналах сервера.
В цепочке еще работает еще один фильтр, который не вызывает FilterChain#doFilter(), а точнее RequestDispatcher#forward() или include(), в результате чего последующие фильтры в цепочке были полностью пропущены (когда они не прослушивают FORWARD или INCLUDE dispatchers; они по умолчанию слушают только REQUEST dispatcher).Решение состоит в том, чтобы либо исправить неправильный фильтр, либо добавить <dispatcher>FORWARD</dispatcher> и т. Д. Соответственно, либо изменить порядок объявлений фильтра в web.xml, чтобы ваш новый фильтр пришел до другого фильтра (вам, в свою очередь, нужен толькочтобы убедиться, что ваш новый фильтр правильно использует FilterChain#doFilter() :)).
FilterChain#doFilter()
RequestDispatcher#forward()
include()
FORWARD
INCLUDE
REQUEST
<dispatcher>FORWARD</dispatcher>
web.xml
URL-адрес запроса неверен.Вы использовали http://localhost:8080/hello/world. Если фильтр прослушивает /*, это означает, что контекст веб-приложения должен быть ROOT или, по крайней мере, /hello.Проверьте свой контекст веб-приложения.Я бы просто повторил попытку с URL-адресом, который указывает на действительный JSP / Servlet в том же веб-приложении, которое генерирует ответ не-404.Фильтр тогда тоже вызывается?
/*
/hello
Как выглядит веб-запрос? Можете ли вы попробовать изменить свой URL-шаблон на *. Jsp вместо / *? Если вы используете что-то отличное от чистого JSP, измените его на расширение окончания запроса (например, для Struts это обычно * .do).