java
public class SessionFilter extends OncePerRequestFilter{
protected static final String[] allowUrls={"js","css","font","html","login","Login","jpg"};
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// TODO Auto-generated method stub
String requestUrl = request.getRequestURI();
System.out.println(requestUrl);
for (String url : allowUrls) {
if (requestUrl.contains(url)) {
filterChain.doFilter(request, response);
}
}
//获取Session
HttpSession session = request.getSession();
MerchantInfo merchantInfo = (MerchantInfo)session.getAttribute("merchantInfo");
String requestType = request.getHeader("X-Requested-With");//识别ajax的响应头
if(merchantInfo==null){
if (requestType != null && requestType.equals("XMLHttpRequest")) {//如果是ajax类型,响应logout给前台
response.setHeader("sessionstatus", "timeout");
}else{
try {
throw new SessionTimeoutException();
} catch (SessionTimeoutException e) {
}// 返回到配置文件中定义的路径
}
}else{
filterChain.doFilter(request, response);
}
}
js
$(document).ajaxComplete(function(event, response, settings) {
var sessionstatus = response.getResponseHeader("sessionstatus");if(sessionstatus != null && typeof sessionstatus != "undefined" && sessionstatus.length > 0){
// 这里写Session超时后的处理方法
$.alert.open({
type: 'warning',
content: '登录超时,请重新登录!',
callback(e) {
location.href=rootPath+"/login";
}
});
}
});