一、问题
我的请求时ajax请求,所以跳转不成功
二、解决办法
后端拦截器通过判断请求头的类型来曲别是什么类型的请求
public class LoginIterceptor implements HandlerInterceptor {
//进入controller 方法前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
if (user == null) {
// 获取到项目名,以便下面进行重定向
String homeUrl = request.getContextPath();
// 如果是 ajax 请求,则设置 session 状态 、CONTEXTPATH 的路径值
// 如果是ajax请求响应头会有,x-requested-with
if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
response.setHeader("SESSIONSTATUS", "TIMEOUT");
response.setHeader("CONTEXTPATH", homeUrl + "/login.jsp");
// FORBIDDEN,forbidden。也就是禁止、403
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
} else {
// 如果不是 ajax 请求,则直接跳转即可
response.sendRedirect(homeUrl + "/login.jsp");
}
return false;
}
return true;
}
}
前端:ajax加上拦截器跳转的方法
//分页查询请求
function to_page(currentPage,pageSize) {
$.ajax({
url:"/user/list",
data:{'currentPage':currentPage,'pageSize':pageSize},
type:"post",
async: true,
dataType:'json',
success:function(ref){
if (ref.flag){
//1.解析数据到table
page_list(ref);
//解析显示分页信息
page_info(ref);
//3.解析并显示分页信息
page_nav(ref);
}
},
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");
}
}
});
}