1.shrio filter AccessControlFilter
重写 方法 :protected abstract boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception
@Override
protected boolean onAccessDenied(ServletRequest servletRequest,
ServletResponse servletResponse) throws Exception {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
if (!"XMLHttpRequest".equalsIgnoreCase(request
.getHeader("X-Requested-With"))) {// 不是ajax请求
return super.onAccessDenied(servletRequest, servletResponse);
}
String url = request.getRequestURL().toString();
String contextPath = request.getContextPath();
url = url.substring(0,
(url.indexOf(contextPath) + contextPath.length()));
String urls = casUrl + "/login?service=" + url;
log.info("ajax session timeout url-----------" + urls);
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(urls);
return false;
}
把要跳转的路径 返回给ajax;
ajax 在error中 接收:
$.ajax({ type : "post", data : paramsStr, url : reqUrl, dataType : "json", success : function(jsonData) { callback(jsonData); }, error : function(e) { var errorText = e.responseText; if (errorText != undefined && errorText != "" && errorText.indexOf("login?service") > 0) { window.location.href = e.responseText; } else { alertOperFailure(); } } });