0

ログイン アプリケーションでフィルタを使用しています。管理者のみがアクセスできるページが必要です。これらのページを管理フォルダーに保持し、プロジェクトにフィルターを実装しました。ただし、他のユーザーは引き続き URL を介してページにアクセスできます。

どこが間違っているのですか?

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;


public class LoginFilter implements Filter {

    @Override
    public void init(FilterConfig config) throws ServletException {
        // If you have any <init-param> in web.xml, then you could get them
        // here by config.getInitParameter("name") and assign it as field.
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        HttpSession session = request.getSession(false);

        if (session == null || session.getAttribute("user") == null) {
            response.sendRedirect(request.getContextPath() + "/Login.xhtml"); // No logged-in user found, so redirect to login page.
        } else {
            chain.doFilter(req, res); // Logged-in user found, so just continue request.
        }
    }

    @Override
    public void destroy() {
        // If you have assigned any expensive resources as field of
        // this Filter class, then you could clean/close them here.
    }

}
4

1 に答える 1

2

理論的には、これには 2 つの理由が考えられます。

  • フィルタがまったく機能しない
  • フィルターは、アプリケーションのページを保護しません。

些細なことに聞こえるかもしれませんが、フィルターがまったく実行されるかどうかを指定できますか? はいの場合、 chain.doFilter(req,res) に来ますか?

于 2012-09-22T06:27:04.460 に答える