2014-09-02 288 views
-1

我试图实现一个servlet过滤器来调整web应用中的自动化。然而过滤器没有被调用,我找不到原因。Servlet过滤器不工作

这是我的过滤器实现:

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 2014-09-02 10:25:52

+2

过滤器名称值在web.xml中的过滤器定义和过滤器映射之间不匹配。 LoggingFilter vs LogginFilter ... – 2014-09-02 10:32:26

+0

@Ben那是我试图修复错误,我恢复了它,但似乎在我的文章保持相同的方式 – 2014-09-02 10:39:05

回答

0

尝试很多东西,调试后,我终于找到了为什么我的Servlet过滤器工作不正常。首先,正如@Ben提到的,在web.xml文件中应该是“/ ”而不是“/ user/”。另一个错误是因为@tt_emrah声明过滤器名称值在web.xml中不匹配。主要的错误是由于我误解函数“.indexOf()”。而不是使用url.indexOf(“/ admin/*”),我应该使用url.indexOf(“/ admin”)。感谢大家帮助我。