后台扩展一个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);
}
});
})();
本文介绍了一种自定义的后台过滤器实现方案,用于检测并处理Ajax请求中的Session超时情况。通过扩展Filter,当检测到Session过期时,会返回特定的JSON消息给客户端。同时,客户端使用jQuery对Ajax请求进行扩展,以便正确处理服务器返回的Session超时信息。
335

被折叠的 条评论
为什么被折叠?



