Бесконечный цикл при использовании фильтра для файлов JSP - PullRequest
0 голосов
/ 05 сентября 2010

Когда я делаю фильтр для всех страниц JSP, браузер заходит в бесконечный цикл, но когда я делаю фильтр только для одной страницы, он работает правильно !!

Вот метод doFilter, если кто-то найдет ошибку, plx, сообщите мне ...

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    if (debug)  log("AuthenticationFilter:doFilter()");
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    HttpServletResponse httpres = (HttpServletResponse) response;
    HttpServletRequest httpreq = (HttpServletRequest) request;

    if (httpreq.getRequestURI().indexOf("login.jsp") == -1 || httpreq.getRequestURI().indexOf("LoginServlet") == -1) {
   // if(!httpreq.getRequestURL().equals("/OSQS/Login.jsp")){
        HttpSession session = httpreq.getSession();
        String logged = (String) session.getAttribute("login");

        if (logged == null) {
            httpres.sendRedirect("login.jsp");
            return;
        }
    }
    chain.doFilter(request, response);

}

1 Ответ

3 голосов
/ 05 сентября 2010

Причиной этой проблемы является то, что фильтр url-pattern явно слишком общий, например /* или, может быть, *.jsp. Он будет выполняться для каждого запроса JSP.

В фильтре вы отправляете перенаправление на login.jsp, когда зарегистрированный пользователь отсутствует. Перенаправление будет указывать клиенту запустить новый HTTP-запрос. Новый HTTP-запрос снова вызовет фильтр, когда URL-адрес запроса совпадет с url-pattern. Поскольку зарегистрированный пользователь все еще отсутствует, он входит в бесконечный цикл перенаправления.

Помимо определения URL-адреса запроса (как вы это сделали), вы также можете просто разместить защищенные страницы на более конкретном url-pattern, например. /secured/*, /private/* или около того, а затем поместите туда защищенные страницы, а страницу входа - нет. Если вы перенаправите на страницу входа, фильтр больше не будет вызываться.

...