2011-03-16 20 views
0

我有一个简单的过滤器:当调度程序为FORWARD并且调度程序为REQUEST时,如何应用Filter?

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,我想知道:他们应该怎么做才能使我的过滤器适用于上述两种情况?

+0

您使用的是哪个应用程序服务器,包括其版本?在你的web.xml中,'web-app'元素的'version'属性的值是多少? – kschneid 2011-03-16 13:57:49

+0

@kschneid:Apache Tomcat 6.0.30,web-app version =“2.4” – Roman 2011-03-16 14:25:00

+0

您确定'web.xml'中只有一个过滤器映射吗?当你有两个相同的过滤器映射时,可能会发生这种情况。 – BalusC 2011-03-16 16:35:07

回答

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> 

希望这清除了您遇到的问题。

+0

+1在类似情况下为我工作 – 2011-10-24 14:28:34