ajax请求的主体不是浏览器,而是XHRHttpRequest,所以不能通过在后台服务器直接发起重定向的方式解决,而是先判断如果是ajax请求,就用一个json绑定相关信息(或者将信息设置到header里面(Spring-MVC),但是struct2未能实现),然后在jsp页面端通过一个统一的方法来处理所有的ajax请求,如果找到了有关session失效的信息,就通过jquery主动发起重定向。
//判断如果session失效,并且是ajax请求,那么绑定sessionout到json上。
if(session.getAttribute(Constants.CURRENT_USER)==null){
if (isAjax((HttpServletRequest)request)) {
JSONObject jsonObj = new JSONObject();
jsonObj.put(“sessionout”, “sessionout”);
response.setCharacterEncoding(“utf-8”);
response.setContentType(“text/html;charset=utf-8”);
try {
response.getWriter().write(jsonObj.toString());
} catch (IOException e) {
throw new RuntimeException(e.getMessage(),e);
}
//找一个公用的js,比如easyUI.js,把下面这段代码写上去,对ajax请求做全局判断,判断session是否失效,如果失效(即找到sessionout字段),就完成重定向操作。
(function (){
(function (){
.ajaxSetup({
complete : function(obj) {//此处的obj指的是XHRHttpRequest,打桩输出之后可以发现json是放在responseText里面
obj=eval(“(“+obj.responseText+”)”);//把json字符串转换成json对象
if (obj.sessionout == “sessionout”) {
window.location=”/zero2”;
}
}
});
});
参考文章:https://blog.csdn.net/xiaoshuji/article/details/50606680