小弟刚开始学servlet,jsp,然后做一个Filter的实验,检查用户是否登陆,没登陆的话就引导回登陆页面,但是配置以后,就无法登陆资源
这是filter class
 public void doFilter(ServletRequest request, ServletResponse response,     
            FilterChain chain) throws IOException, ServletException {     
    
        HttpServletRequest req = (HttpServletRequest) request;     
        HttpServletResponse res = (HttpServletResponse) response;     
        HttpSession session = req.getSession();     
   
        String str = (String)session.getAttribute("user");     
        String url = req.getRequestURI();  
        
        //if session is null ,redirect to login  
        //ManageServlet是处理登陆用的,index.html是登陆界面,WAEAssign是主资源地址
        if (str == null && !url.endsWith("ManageServlet") &&!url.endsWith("WAEAssign")){     
            res.sendRedirect("index.html");     
        } else {     
            chain.doFilter(request, response);     
            res.setHeader("Cache-Control","no-store");           
            res.setDateHeader("Expires",0);        
            res.setHeader("Pragma","no-cache");      
            res.flushBuffer();     
        }     
             
    }     这里是filter的web.xml配置<filter>    
    <filter-name>UsersFilter</filter-name>    
    <filter-class>com.labAdmin.filter.UsersFilter</filter-class>    
  </filter>     <filter-mapping>    
  <filter-name>UserFilter</filter-name>    
  <url-pattern>/*</url-pattern>    
 </filter-mapping> 把web.xml注释掉就能访问,主地址是http://localhost:8080/WAEAssign/ ,ManageServlet是处理登陆的servlet,应该是让filter在这之后起作用 ,谢谢各位

解决方案 »

  1.   


        if (str == null && !url.endsWith("ManageServlet") &&!url.endsWith("WAEAssign")){     
                res.sendRedirect("index.html");     
            }
    在 if 里面的条件 改为if(str==null || str=="" && ..........)就可以了,  因为,如果是输入框,传过来的 字符串是""   而不是 null
      

  2.   

    额,不好意思。 理解错了。 
     应该是  res.sendRedirect("index.html");   出了问题。不过还也是要 在  if 里加个  && !url.endwiths(index.html).
    或者用 res.getRequestDispatcher("index.html").forward(res,req) .
      

  3.   

    你的if条件永远不会成立  调试一下你的filter