当调度程序为FORWARD以及调度程序是REQUEST时,如何应用Filter?

时间:2011-03-16 12:42:21

标签: java servlets servlet-filters dispatcher

我有一个简单的过滤器:

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没有输出。)

在这个过滤器之后有第三方过滤器和servlet,我想知道:他们应该怎样做才能在两种情况下应用我的过滤器?

1 个答案:

答案 0 :(得分:1)

尝试使用单个<filter-mapping>条目同时使用请求 FORWARD 调度程序

示例

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

希望这能解决你遇到的问题。