2014-09-02 5 views
-1

Я пытаюсь реализовать фильтр сервлета, чтобы настроить авторизацию в веб-приложении. Однако фильтр не вызывается, и я не могу найти причину.Сервлет фильтр не работает

Это моя реализация фильтра:

public class LoginFilter implements Filter{ 

@Override 
public void destroy() { 
    // TODO Auto-generated method stub 

} 

public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) throws IOException, ServletException { 
    HttpServletRequest req = (HttpServletRequest) request; 
    HttpServletResponse resp = (HttpServletResponse) response; 
    LoginBean session = (LoginBean) req.getSession().getAttribute("LoginBean"); 
    String url = req.getRequestURI(); 

    if(session == null || !session.isLogged) { 
     if(!(url.indexOf("/home/index.xhtml") >= 0)){ 
     resp.sendRedirect(req.getServletContext().getContextPath() + "/home/index.xhtml");   
     } 
     else{ 
      chain.doFilter(request, response); 
     } 
    } else { 
     if(session.role == 1) { 
      if(url.indexOf("/admin/*") >= 0 || url.indexOf("/home/index.xhtml") >=0){ 
      resp.sendRedirect("/user/index.xhtml"); 
      } else if (url.indexOf("/home/logout.xhtml") >= 0){ 
       req.getSession().removeAttribute("LoginBean"); 
       resp.sendRedirect(req.getServletContext().getContextPath() + "/home/index.xhtml"); 
      } 
      else{ 
       chain.doFilter(request, response); 
      } 
     } else { 
      if(url.indexOf("/user/*") >= 0 || url.indexOf("/home/index.xhtml") >=0){ 
       resp.sendRedirect(req.getServletContext().getContextPath() + "/admin/index.xhtml"); 
       } else if (url.indexOf("/home/logout.xhtml") >= 0){ 
        req.getSession().removeAttribute("LoginBean"); 
        resp.sendRedirect(req.getServletContext().getContextPath() + "/home/index.xhtml"); 
       } 
       else{ 
        chain.doFilter(request, response); 
       } 
     }}} 
@Override 
public void init(FilterConfig arg0) throws ServletException { 
    // TODO Auto-generated method stub 
} 
} 

Кроме того, здесь есть отображение фильтра:

<filter> 
<filter-name>LoggingFilter</filter-name> 
<filter-class>com.ibm.club.data.LoginFilter</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>LogginFilter</filter-name> 
<url-pattern>/user/*</url-pattern> 
</filter-mapping> 
+0

Фильтр кажется действительным только для/user/URL-шаблон – Ben

+2

значения имени фильтра не соответствуют определению фильтра и отображению фильтра в web.xml. LoggingFilter vs LogginFilter ... –

+0

@Ben, это было то, что я пытался исправить ошибку, я вернул его обратно, но, похоже, он остался таким же образом в моем сообщении –

ответ

0

Перепробовав много вещей и отладки я наконец-то понял, почему мой сервлет фильтр не работает должным образом , Прежде всего, как отметил @Ben, в файле web.xml должно быть «/ » вместо «/ user/». Другая ошибка заключалась в том, что @tt_emrah заявила, что значения имени фильтра не совпадают в web.xml. Основная ошибка была связана с моей неправильной интерпретацией функции «.indexOf()». Вместо использования url.indexOf ("/ admin/*"), я должен был использовать url.indexOf ("/ admin"). Спасибо всем за то, что помогли мне.

Смежные вопросы