1.shrio filter AccessControlFilter
重写 方法 :protected abstract boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception
@Overrideprotected 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();}}});