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 に答える