过滤不工作

时间:2012-08-03 11:44:26

标签: java servlets servlet-filters

我基本上有一个过滤器,并且在其中使用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!");
}

现在,当我第一次运行此过滤器时,我得到了#34;过滤器运行&#34;消息,但在那之后,我包括hibernate和其他库,它停止工作,我删除它们和相同的结果。过滤器不运行。检查网址模式和一切..无能为力!!

任何指针?

2 个答案:

答案 0 :(得分:1)

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

chain.doFilter(request, response);

如果不这样做,您的请求将不会在过滤后进一步处理。

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

编辑:

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

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

答案 1 :(得分:1)

也许你之前已经执行了另一个Filter,但没有调用chain.doFilter(),从而阻止执行下一个过滤器(包括你的过滤器)。