后台代码
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/'; //如果是过期,跳转到页面
}
}
});