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

nullff 2013-12-17 05:15:41

小弟写了个过滤器来过滤是否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
...全文
229 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
再见尼罗河 2015-01-17
  • 打赏
  • 举报
回复
我也遇到这个问题~写法没错~研究了好久~怎么试都不对~但我的页面刷新能跳转,查询什么的就不行~为什么呢?突然恍然大悟~一个是strus跳转请求,一个是ajax请求,而ajax请求是不能处理转发和重定向的。
楼主看看是不是ajax请求,是的话参考
http://zhuchengzzcc.iteye.com/blog/1830567 有解决办法。

长笛党希望 2013-12-17
  • 打赏
  • 举报
回复
把47行。。 request.getRequestDispatcher(loginPage).forward(request, response); 这句,删了。。。试试。。
zuxianghuang 2013-12-17
  • 打赏
  • 举报
回复
你的意思是页面放在那,然后session超时后,页面不做任何操作,自动就跳到登陆页面? 这个实现,得由页面不停的向服务器发请求,然后超时做跳转。 你想让服务器控制浏览器是不行。
nullff 2013-12-17
  • 打赏
  • 举报
回复
求大神解决。。。。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧