对于同步请求,在用户没有权限时,shiro会把用户重定向到指定页面,但是ajax请求,这个就不好用了,ajax请求每次获取的可能是页面,也可能是数据。
针对这种情况,做了以下处理:
if (httpRequest.getHeader("X-Requested-With") == null || !httpRequest.getHeader("X-Requested-With").equals("XMLHttpRequest")) {
if(StringUtils.hasText(unauthorizedUrl)) {
WebUtils.issueRedirect(request, response, unauthorizedUrl);
} else {
WebUtils.toHttp(response).sendError(401);
}
}else {
WebUtils.toHttp(response).sendError(401,"没有权限");
}
先判断是不是ajax请求,如果是,则发送错误消息。
在页面端也要做以下处理:
error:function (jqXHR) {
alert(eval("("+jqXHR.responseText+")").message);
}
获取到服务端返回的错误消息,并展示给用户。