当前位置:编程学习 > JAVA >>

session过期后无法跳转页面 如果按f5的话可以跳转到登陆页面


小弟写了个过滤器来过滤是否session过期 
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterchain)
throws ServletException, IOException {



 // 不过滤的uri  
        String[] notFilter = new String[] { "login.jsp","login","plui","include",".css","testLoginServlet" };  
  
        // 请求的uri  
        String uri = request.getRequestURI();
  
        // uri中包含plattutor3时才进行过滤  
        if (uri.indexOf("plattutor3") != -1) {  
        
            // 是否过滤  
            boolean doFilter = true;  
            for (String s : notFilter) {  
                if (uri.indexOf(s) != -1) {  
                
                    // 如果uri中包含不过滤的uri,则不进行过滤  
                 System.out.println("session filter  不过滤__________");
                    doFilter = false;  
                    break;  
                }  
            }  
            if (doFilter) {  
            if(request.getSession(false)==null){ 
         
     System.out.println("session已经过期"); 
     response.sendRedirect("/plattutor3/tutor/test/login.jsp");
    
    
     }else{
                // 执行过滤  
                // 从session中获取登录者实体  
              Object obj=  request.getSession(false).getAttribute("userInfo");  
                if (null == obj) {  
                 System.out.println(request.getSession(false)+"session filter__________");
                    // 如果session中不存在登录者实体,则弹出框提示重新登录  
                    // 设置request和response的字符集,防止乱码  
                   // request.setCharacterEncoding("UTF-8");  
                    //response.setCharacterEncoding("UTF-8");  
                    //PrintWriter out = response.getWriter();  
                    String loginPage = "/plattutor3/tutor/test/login.jsp";  
                    response.sendRedirect(loginPage);
                    request.getRequestDispatcher(loginPage).forward(request, response);
                } else {  
                    // 如果session中存在登录者实体,则继续  
                 filterchain.doFilter(request, response);  
                }  
     }
            } else {  
                // 如果不执行过滤,则继续  
             filterchain.doFilter(request, response);  
            }  
        } else {  
            // 如果uri中不包含background,则继续  
         filterchain.doFilter(request, response);  
        }  

}



下面是后台报错


---判断session过期  控制台打印   

session已经过期

----这是跳转到登陆页面    但是问题是前台没跳转  后台已经判断跳转了 。。   如果按f5的话可以跳转到登陆页面
session filter  不过滤__________
weblogic.servlet.internal.session.MemorySessionData@14ddcb9session filter__________
weblogic.servlet.internal.session.MemorySessionData@14ddcb9session filter__________
<2013-12-17 下午05时03分05秒 CST> <Error> <HTTP> <BEA-101020> <[ServletContext@26172446[app:WebRoot module:WebRoot path:/plattutor3 spec-version:null]] Servlet failed with Exception
java.lang.IllegalStateException: Cannot forward a response that is already committed --------------------编程问答-------------------- 求大神解决。。。。 --------------------编程问答-------------------- 你的意思是页面放在那,然后session超时后,页面不做任何操作,自动就跳到登陆页面?

这个实现,得由页面不停的向服务器发请求,然后超时做跳转。
你想让服务器控制浏览器是不行。

--------------------编程问答-------------------- 把47行。。
request.getRequestDispatcher(loginPage).forward(request, response);

这句,删了。。。试试。。
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,