在web应用中使用jquery进行ajax请求,有些ajax请求必须是登录后或者通过认证授权后才可以访问的,而这些认证授权以及登录拦截通常在系统中都会使用filter或者interceptor来统一实现,对于普通的http请求被拦截后通过redirect方式重定向到登录页面没有问题,但是ajax是异步操作,如何采用简单统一的方式来解决这个问题
解决方案
publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException {if(request.getSession().getAttribute("user")==null)//判断session里是否有用户信息 {if(request.getHeader("x-requested-with")!=null&&request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {//如果是ajax请求响应头会有,x-requested-with;response.setHeader("sessionstatus","timeout");//在响应头设置session状态returnfalse;}}returntrue;}
//全局的ajax访问,处理ajax清求时sesion超时$.ajaxSetup({contentType:"application/x-www-form-urlencoded;charset=utf-8",complete:function(XMLHttpRequest,textStatus){varsessionstatus=XMLHttpRequest.getResponseHeader(" sessionstatus");//通过XMLHttpRequest取得响应头,sessionstatus,window.location.replace("${path}/common/login.do");}}}});