我用filter实现登录权限控制,就是必须正确登录,才能进入index.jsp,如果直接在地址栏输入index.jsp的地址进入的话,页面将自动跳转到登录页面,用jbuilder运行程序时,没问题,各功能都能实现,但当我用浏览器运行时,出现了一个很奇怪的问题:
  输入用户名和密码能正常登录,在地址栏输入index.jsp的地址进入时,也能正确跳转到登录页面,但在这时输入用户名和密码提交后,老是自动跳转到登录页面,就是不到index.jsp,不知道为什么?用jbuiler运行时不会有这种错,郁闷呀!!![em5]过滤器代码如下(过滤所有jsp页面,除登录页面外)
public void doFilter(ServletRequest request, ServletResponse response,
                       FilterChain filterChain) {
    try {
      HttpServletRequest res=(HttpServletRequest)request;
      HttpServletResponse rep=(HttpServletResponse)response;
      HttpSession session=res.getSession(true);
      System.out.println("aaa  "+session.getAttribute("loginId"));
      if(session.getAttribute("loginId")==null ){
        RequestDispatcher dis = request.getRequestDispatcher("/login.jsp");
        dis.forward(request, response);
      }
      else{
         filterChain.doFilter(request, response);
      }    }
    catch (ServletException sx) {
      sx.printStackTrace();
      filterConfig.getServletContext().log(sx.getMessage());
    }
    catch (IOException iox) {
      iox.printStackTrace();
      filterConfig.getServletContext().log(iox.getMessage());
    }
  }

解决方案 »

  1.   

    你应该在这个filter中判断用户是否已经正在请求login.jsp再判断getAttribute("loginId")否则用户输入用户名时也无法进入login.jsp中处理登录。
      

  2.   

    ChDw(米) 能不能说得明白些呀,看不懂呀,谢谢了
    还有个问题是同样的工程为什么在jbuilder里没出错呢
      

  3.   

    1.将“res.getSession(true);”改为“res.getSession();”
    2.修改web.xml配置文件,让过滤器不对登录页面生效。
    再试试看!
      

  4.   

    ChDw(米) 说的很清楚了.
    Filter在请求资源(在这里是页面)时,或资源回应时,或两者都是起过滤作用的.
    要是你处理登录的代码也被Filter了,那就不可能被执行.
    也就是你永远登录不进去.
      

  5.   

    HttpSession session=res.getSession(true);
    改成FALSE看看
      

  6.   

    kaukiyou(小全) 可能你没注意代码上面的一句话:过滤器代码如下(过滤所有jsp页面,除登录页面外)
    我已经在配置文件里除了登录页面的,将“res.getSession(true);”改为“res.getSession();”
    这种方法我也试过的,没用,其实代码我真的没看出来有什么错,因为我在jbuilder里测试是没有任何错的,就是移到tomcat下用浏览器测试时才出现这种错的,很是不明白。
    谢谢各位了!!!
      

  7.   

    如何在web.xml对登陆页面失效呢?!
      

  8.   

    你过滤的是页面.不知道你的后台代码怎么写的.难道java代码也写在jsp页面里了.如果登录的后台处理代码不是在页面里,而是单独的servlet,你过滤页面有什么用呢.