一、自定义拦截器 ,判断是否是ajax请求,如果是设置401错误代码
package com.ssm.controller.dlljq;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.ssm.utils;
public class LoginHandlerIntercepter implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String name=(String)request.getSession().getAttribute("name");//获取登陆的用户名
if(name != null) {
return true;//登陆成功不拦截
}else {
if (utils.isAjaxRequest(request)) {
response.setStatus(401);
PrintWriter out = response.getWriter();
out.print(request.getContextPath() + "/login");
out.flush();
return false;
} else {
request.getRequestDispatcher("/login.jsp").forward(request,response);
return false;
}
}
}
}
二、判断ajax请求工具类
/**
* 判断是否是ajax请求
* @param request
* @return
*/
public static boolean isAjaxRequest(HttpServletRequest request) {
String header = request.getHeader("X-Requested-With");
if (header != null && "XMLHttpRequest".equals(header))
return true;
else
return false;
}
三、在jquery.js中最后编写统一处理方法
/*handle HTTP 401*/
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
jqXHR.statusCode({
401: function(data){
/* $.dialog({
type: "alert",
content: data.responseText
});*/
window.parent.location.href=context+"/login.jsp"
return;
}
});
options.beforeSend=function(jqXHR, settings) {
if (typeof settings.error === 'function') {
var errorfunc = settings.error;
settings.error = function(jqXHR2, textStatus, errorThrown) {
if (jqXHR2.status !== 401) errorfunc(jqXHR2, textStatus, errorThrown);
};
}
}
});
然后可以测试一下,在web.xml中修改session过期时间 1代表一分钟
登录系统后等待一分钟,然后向后台发送请求就会跳转到登陆页面。