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 开发