2010-09-04 1 views
0

Когда я делаю фильтр для всех страниц jsp, браузер переходит в бесконечный цикл, , но когда я делаю фильтр только для одной страницы, он работает правильно!Бесконечный цикл при использовании фильтра для файлов 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); 

} 

ответ

3

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

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

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

+0

thanx это браузер работы не заходил в петлю infinte и отображал страницу входа в систему, но когда я меняю URL-адрес на private/secure.jsp, он переходит в цикл infinte :(и не перенаправлялся на страницу входа !! ? – palAlaa

+0

Возможно, у вас все еще есть страница входа в защищенную папку? Вы изменили 'sendRedirect (« login.jsp »)' на 'sendRedirect ("/login.jsp ")'? – BalusC

+0

проблема, которую я обнаружил, заключается в том, что пользователь получает сеанс даже если он не вошел в систему? Я не знаю, почему, так как я получаю HTTP-запрос формы сеанса в сервлете после того, как я уверяю вас в подключении db, а затем сделайте session.setAttribute («Вход», «ОК») и что что я проверяю фильтр, здесь: String logged = (String) session.getAttribute («login»); , но я потрясен, пользователь получил атрибут сеанса login = ok, но он не заходил в систему !!!!!!!! !!!!!!!!!!!!! – palAlaa