Как это возможно, что фильтр применяется, когда его диспетчер является FORWARD, а также когда диспетчер является REQUEST? - PullRequest
0 голосов
/ 16 марта 2011

У меня есть простой фильтр:

public class TestFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("before");
        chain.doFilter(request, response);
        System.out.println("after");
    }

    public void destroy() {
    }

}

Это первый фильтр в web.xml, и он имеет одно из следующих двух сопоставлений:

<filter-mapping>
    <filter-name>cookie-test-filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

или

<filter-mapping>
    <filter-name>cookie-test-filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

В обоих случаях я вижу вывод:

before
before
after
after

(я также пробовал INCLUDE в качестве диспетчера, просто чтобы убедиться, что все работает - нет вывода с INCLUDE).

Существуют сторонние фильтры и сервлеты после этого фильтра, и мне интересно: что они должны делать, чтобы мой фильтр применялся в обоих описанных случаях?

1 Ответ

1 голос
/ 19 октября 2011

Попробуйте использовать одну запись <filter-mapping> с обоими REQUEST и FORWARD диспетчер

Пример

<filter-mapping>
    <filter-name>cookie-test-filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

Надеюсь, это решит проблему, с которой вы столкнулись.

...