在写项目中,项目用的hibernate 拦截器是extends HttpServlet implements Filter 的 在 doFilter中拦截后 重定向没有实现跳转,无论怎么重定向都不行。
后面网上查阅了一些资料,晓得,页面初始用Ajax,后台返回数据,前台接收,前台解析以为是返回数据,所以没能实现重定向。
需要返回标示,Ajax 后处理,再页面跳转就可以了。代码如下:
后台doFilter中代码:
Person person = (Person)session.getAttribute("person");//登录人角色
if(person == null) {//如果登录标识为空
// 处理ajax请求
response.setHeader("SESSIONSTATUS", "TIMEOUT");
response.setHeader("CONTEXTPATH", request.getContextPath() + "/"+LOGIN);
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
//response.sendRedirect(request.getContextPath() + "/"+LOGIN);
return;
}
前台js中代码(可以写到common.js中):
//通过$.ajaxSetup()方法给ajax方法统一添加请求执行结束后,执行的操作
$.ajaxSetup({
//设置ajax请求结束后的执行动作
complete :
function(XMLHttpRequest, textStatus) {
// 通过XMLHttpRequest取得响应头,sessionstatus
var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");
if (sessionstatus == "TIMEOUT") {
var win = window;
while (win != win.top){
win = win.top;
}
win.location.href= XMLHttpRequest.getResponseHeader("CONTEXTPATH");
}
}
});