后台代码
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
HandlerInterceptorAdapter :spring-MVC过滤器
提高三个方法:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } public void postHandle( HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } public void afterCompletion( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }
在preHandle中,访问前 --- 可以进行编码、安全控制等处理 ;
在postHandle中,方法访问后(调用了Service并返回ModelAndView,但未进行页面渲染) --- 有机会修改ModelAndView ;
在afterCompletion中,返回处理(已经渲染了页面) --- 可以根据ex是否为null判断是否发生了异常,进行日志记录 。
public class MyHandlerInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception { //一些不需要过滤的连接 登陆方法 等 String url = request.getRequestURI(); if(url.endsWith("user/login") ){ return true; } if(request.getSession().getAttribute(Constants.USER_INFO_SESSION) == null){ //判断session中,用户信息是否为null,为null表示未登陆 //判断是否是AJAX访问 if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) { response.setHeader("sessionstatus", "timeout"); return false; }else{ response.sendRedirect(request.getContextPath()+"/index.jsp"); //非AJAX访问,页面跳转 return false; } } return true; } }
前台 JQuery 和 EXT 框架的AJAX处理
JQuery统一处理
//全局的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"); } } } });
EXT统一处理
Ext.Ajax.on('requestcomplete', function(conn, response, optoins) { if (response.getResponseHeader) { if (response.getResponseHeader('sessionstatus') == 'timeout') { window.location.href = 'http://www.baidu.com/'; //如果是过期,跳转到页面 } } });