2012-08-03 281 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(),從而防止下一個過濾器(包括你)執行。