2012-08-03 232 views
1

我基本上有一个过滤器和它的doFilter方法,我只是打印一条消息到控制台,我已经应用该过滤器到我的示例Web应用程序的每个页面。过滤器不工作

的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_3_0.xsd" id="WebApp_ID" version="3.0"> 


<filter> 
    <filter-name>LoginFilter</filter-name> 
    <filter-class> 
     com.mypkg.filters.LoginFilter 
    </filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>LoginFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<welcome-file-list> 
<welcome-file>utility.jsp</welcome-file> 

和我的过滤代码 LoginFilter.java

package com.mypkg.filters; 

import java.io.IOException; 
import javax.servlet.*; 
import javax.servlet.http.HttpServletResponse; 
//other imports 

public class LoginFilter implements Filter { 

@Override 
public void init(FilterConfig config) throws ServletException { 
    System.out.println("Filter init ran!"); 
} 

@Override 
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException { 
    System.out.println("Filter running!"); 
} 

@Override 
public void destroy(FilterConfig config) throws ServletException { 
    //System.out.println("Filter destoryed!"); 
} 

现在,当我第一次跑这个过滤器,我得到了 “过滤器运行” 的消息,但之后,我包括休眠和其他库,它停止工作,我删除他们和相同的结果。过滤器不会运行。检查URL模式和一切..无能为力!

任何指针?

+0

所以现在你可以看到init()调用? – 2012-08-03 11:52:02

+0

是的,init正在运行!但不是doFilter。 – magiclko 2012-08-03 11:59:44

回答

1

首先,在你的doFilter方法,你应该调用链中的下一个过滤器:

chain.doFilter(request, response); 

没有这个您的申请将不会被你的过滤器后进一步加工。

这可能是您的问题的原因。

编辑:

而且你的destroy()方法是错误的。在这里你应该如何重写它:

@Override 
public void destroy() { 
    System.out.println("Filter destoryed!"); 
} 
+0

chain.doFilter在doFilter中,但它仍然不起作用! – magiclko 2012-08-03 12:08:07

+0

我编辑过。你的destroy()方法是错误的。 – dimas 2012-08-03 12:14:46

1

也许你有另一Filter你之前执行,那不叫chain.doFilter(),从而防止下一个过滤器(包括你)执行。