2014-09-02 286 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」)。感謝大家幫助我。