问题描述
在web应用中使用jquery进行ajax请求,有些ajax请求必须是登录后或者通过认证授权后才可以访问的,而这些认证授权以及登录拦截通常在系统中都会使用filter或者interceptor来统一实现,对于普通的http请求被拦截后通过redirect方式重定向到登录页面没有问题,但是ajax是异步操作,如何采用简单统一的方式来解决这个问题
解决方案
1.服务器端添加登录过滤器
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {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状态return false;}}return true;}
2.在公共页面上添加$.ajaxSetup操作,判断一下header中设置的状态码
//全局的ajax访问,处理ajax清求时sesion超时$.ajaxSetup({contentType:"application/x-www-form-urlencoded;charset=utf-8",complete:function(XMLHttpRequest,textStatus){var sessionstatus=XMLHttpRequest.getResponseHeader(" sessionstatus"); //通过XMLHttpRequest取得响应头,sessionstatus,if(sessionstatus=="timeout"){ //如果超时就处理 ,指定要跳转的页面window.location.replace("${path}/common/login.do");}}}});