登录拦截器类:
public class UserLoginInterceptor extends HandlerInterceptorAdapter
{
private static Logger logger = LoggerFactory.getLogger(UserLoginInterceptor.class);
private static final String[] IGNORE_URI = { "/login", "/home", "/browsers", "/auth", "/loginPost", "/getTotalApi",
"/getData" };
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
{
String applicationName = "/"
+ request.getContextPath().split("/")[request.getContextPath().split("/").length - 1] + "/";
String resPrefix = "/assets/";
String imgPrefix = "/images/";
String requestUrl = request.getRequestURL().toString();
String requestUri = request.getRequestURI().toString();
String requestServletPath = request.getServletPath().toString();
if (requestUrl.endsWith(applicationName) || requestServletPath.startsWith(resPrefix)
|| requestServletPath.startsWith(imgPrefix))
{
return true;
}
boolean flag = false;
String url = request.getRequestURL().toString();
for (String s : IGNORE_URI)
{
if (url.contains(s))
{
flag = true;
break;
}
}
if (!flag)
{
String token = SessionUtil.getToken();
if (StringUtils.isNotEmpty(token) && token != "401")
{
flag = true;
}
else
{
logger.error("token is invalidate :" + request.getRemoteHost() + " url :" + request.getContextPath());
response.setHeader("sessionstatus", "timeout");
flag = false;
}
}
return flag;
}
}
前端页面使用全局的Ajax访问,来处理Ajax请求时session过期
//全局的ajax访问,处理ajax清求时sesion超时
$.ajaxSetup({
contentType: 'application/x-www-form-urlencoded;charset=utf-8',
complete: function(xhr, status) {
var sessionStatus = xhr.getResponseHeader('sessionstatus'); // 通过XMLHttpRequest取得响应头,sessionstatus,
if (sessionStatus == "timeout") {
// 如果超时就处理 ,指定要跳转的页面
location.href = 'login';
}
}
});