后台扩展一个filter,判断session过期的代码需要自己写,我这里直接就认为session过期了
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String xmlhttprequest = request.getHeader("X-Requested-With");
if("XMLHttpRequest".equalsIgnoreCase(xmlhttprequest)) { // ajax request
// 判断是否是session过期,如果是执行下边的代码
try {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/json");
response.setDateHeader("Expires", 0);
PrintWriter out = response.getWriter();
out.println("{\"sessionTimeout\": true}");
out.flush();
out.close();
return;
} catch (IOException e) {
System.out.println(e);
}
}
chain.doFilter(req, res);
}
客户端对jquery的ajax处理做扩展,代码如下
(function() { var oldajaxfuc = jQuery.ajax; jQuery.extend({ ajax: function( url, options ){ // If url is an object, simulate pre-1.5 signature if ( typeof url === "object" ) { options = url; url = undefined; } var oldSuccessFunc = options.success; options.success = function(ret) { if(ret.sessionTimeout) { alert("Session timeout"); return; } else { oldSuccessFunc.apply(this, arguments); } } oldajaxfuc(url, options); } }); })();