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 模式和一切.. 无能!!

任何指针?

4

2 回答 2

1

也许你Filter在你之前执行了另一个,它不调用chain.doFilter(),从而阻止下一个过滤器(包括你的)被执行。

于 2012-08-03T12:18:59.727 回答
1

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

chain.doFilter(request, response);

如果没有这个,您的请求将不会在您的过滤器之后得到进一步处理。

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

编辑:

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

@Override
public void destroy() {
     System.out.println("Filter destoryed!");
}
于 2012-08-03T12:06:22.963 回答