Shiro拦截器,返回JSON数据
在前后端分离的情况下,后端人员这边是没有页面的。后端只提供接口,返回json,供前段人员调用。
shiro自带登录过滤器,在拦截到用户未登录的情况下,会重定向到loginUrl。
如果观看shiro登录过滤器UserFilter的源码,会发现如果用户登录失败会调用这个saveRequestAndRedirectToLogin(request, response)方法进行重定向。
protected boolean onAccessDenied(ServletRequest request, ServletResponse response)
throws
Exception {
saveRequestAndRedirectToLogin(request, response);
return false;
}
方案:继承UserFilter类并重写onAccessDenied方法
@Component(
"customUser")
public class CustomUserFilter extends UserFilter {
/**
* 拦截时返回 JSON,而不是跳转到一个loginUrl
*/
@Override
protected boolean onAccessDenied(ServletRequest request,
ServletResponse response)
throws Exception {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
GsonUtil.outPutData(req, res,
"用户未登录!");
return false;
}
}
这里将自定义过滤器声明为spring中的一个bean @Component("customUser"),在shiro的配置文件中再使用自定义的customUser而别再使用user来配置了。
转载请注明原文地址: https://ju.6miu.com/read-4533.html