0

キャッシュページをフィルタリングするためのこのコードがありますが、コンパイル中にいくつかの問題に直面しています:

package bean.log.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//import javax.servlet.annotation.WebFilter;

public class LoginFilter implements Filter
    {
    @Override

        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
        {  
        try
        {


        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res; 
        HttpSession session = request.getSession(false); 
        if (session == null || session.getAttribute("userHash") == null)
            { 
            response.sendRedirect("/scape/applicationservices/fileshare/vm/login/login.jsp"); // No logged-in user found, so redirect to login page.
            response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
            response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
            response.setDateHeader("Expires", 0);
            }
            else
                { 
                chain.doFilter(req, res); // Logged-in user found, so just continue request.
                }
            }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

}

同じものをコンパイルした後、次のエラーが発生します。

D:\programs\MyPackage\bean\log\filter>javac LoginFilter.java
LoginFilter.java:14: bean.log.filter.LoginFilter is not abstract and does not ov
erride abstract method destroy() in javax.servlet.Filter
public class LoginFilter implements Filter
       ^
1 error

そのため、以下のようにコードを変更して@Overrideからコンパイルimplements Filterしましたが、目的の結果が得public void initられません。私が行った変更は次のとおりです。public void destroy

package bean.log.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//import javax.servlet.annotation.WebFilter;

public class LoginFilter // implements Filter
    {
    //@Override
        public void init( ) 
        {   
        }

        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
        {  
        try
        {


        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res; 
        HttpSession session = request.getSession(false); 
        if (session == null || session.getAttribute("userHash") == null)
            { 
            response.sendRedirect("/timescape/applicationservices/fileshare/vm/login/login.jsp"); // No logged-in user found, so redirect to login page.
            response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
            response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
            response.setDateHeader("Expires", 0);
            }
            else
                { 
                chain.doFilter(req, res); // Logged-in user found, so just continue request.
                }
            }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public void destroy( ) 
        {   
        }

}

web.xml でフィルタを設定する方法

以下のように構成しました

<web-app>


    <welcome-file-list>
        <welcome-file>/WEB-INF/index.jsp</welcome-file>
    </welcome-file-list>

    <filter>     
        <filter-name>noCacheFilter</filter-name>     
        <filter-class>bean.log.filter.LoginFilter</filter-class> 
    </filter> 
    <filter-mapping>     
        <filter-name>noCacheFilter</filter-name>     
        <url-pattern>/scape/applicationservices/fileshare/vm/apps/*</url-pattern> 
    </filter-mapping>



</web-app>

このフィルターを使用して、ユーザーがログアウト後にappsディレクトリにある以前のキャッシュページに戻るように制限したいので、それを使用しurl-patternます。このフィルターを機能させる方法。

4

1 に答える 1

1

Java EE フィルターは、上記のインターフェースjavax.servlet.Filterを実装する必要があります。あなたの問題はFilterそれ自体にあるのではなく、Java の使用法にあります。この言語では、一部の非抽象クラスがインターフェースを実装する場合、それまたはその親が宣言されたすべてのメソッドを実装する必要があります。つまり、インターフェースがメソッドinit()を宣言するdoFilter()destroy()、実装が空であっても、クラスはそれらすべてを実装する必要があります。これは、両方のソリューションを組み合わせる必要があることを意味します。

  1. コメントを外すimplements Filter
  2. コメント解除されたメソッドinit()destroy()
  3. @OverrideJava 6 以降を使用している場合は、コメントを外してください。

その後、フィルタは正常に動作するはずです。少なくとも、Web コンテナがweb.xmlマッピングで指定された URL に一致するページを処理するときに実行する必要があります。

とにかく、ログアウト URL は通常それほど複雑ではないと思うので、マッピング URL は/logout. 既に述べたように、フィルターはURL に一致するページでのみ実行されます。

于 2012-09-07T06:12:13.880 に答える