对于jsp中使用frameset或iframe的情况来说,当session丢失时,使用filter,转向登录页面,当点击frame中的链接,会在将登录页面转到frame中,页面看起来非常难看,所以我们要解决这种情况,使整个页面转向登录,而不是frame中的页面转向登录页面。
解决方法:由于filter中只能将request,response向下传递,而无法处理整个页面的跳转情况,所以我们只能在页面中处理整个页面的跳转情况,这里的基本思想是使用一个中间页面,即当session中用户信息为null的时候让页面跳转到中间页面filter中response.sendRedirenct('center.jsp')
在中间页面onload的时候使用javascript的window.top.location.href=登录页面. 即可是框架的整个页面跳转到登录页面。
在这里纠正一下上面的说法,在filter中是可以处理页面框架的页面转向的,方法是得到PrintWriter对象out.write("<script language='javascript'>window.top.location.href=request.getContextPath+登录页面</sciprt>")
当然如果是使用jsp页面写的登录页面,还要在filter中过滤掉,登录之前所要经过的所有页面即让这些页面在filter中chain.doFilter(request,response)传递下去,登录之前的这些页面session中用户信息都是null。