问题:
session超时跳转后还在frame框架里面,得想办法跳出frame后转到登录页面去。
解决办法:
Filter处理
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//判断用户是否已经登录
HttpServletRequest httpServletRequest = (HttpServletRequest)request;
HttpServletResponse servletResponse = (HttpServletResponse)response;
//需要登录的东西不能被浏览器缓存
servletResponse.setHeader("Pragma","No-cache");
servletResponse.setHeader("Cache-Control","no-cache");
servletResponse.setDateHeader("Expires", -10);
String appPath= httpServletRequest.getServletPath();
if(!appPath.equalsIgnoreCase(loginUrl)&&!appPath.equalsIgnoreCase(loginActionUrl)&&!SessionUtil.exist(httpServletRequest, SessionUtil.USER_SESSION_NAME)){
servletResponse.sendRedirect(httpServletRequest.getContextPath()+loginUrl);
return ;
}
chain.doFilter(request, response);
}
或者:
if(session == null || userDTO == null)//判断session是否失效。
{
/*session失效后用户再次操作时页面将会跳回登录页面。*/
PrintWriter out = response.getWriter();
String url = request.getContextPath() + "/index.jsp";
out.println("<script language=\"javascript\">");//利用js跳出iframe。
out.println("top.location=\"" + url + "\";");
out.println("</script>");
}
注:在Filter中无论是forward还是redirct,之后最好return,不需要走 chain.doFilter(request, response); 在某些特殊的情况下可能就会存在问题。