我是靠谱客的博主 漂亮秀发,最近开发中收集的这篇文章主要介绍shiro前后端分离中的跳转问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.问题描述

因为想实现前后端分离,并且使用shiro进行权限管理
但是碰到一个问题就是shiro的重定向问题

1.未登录,shiro会自动重定向到 /login
2.访问路径无权限,shiro会抛出401 http错误

2.解决

因为我纯粹只想用springBoot写后端api所以就必须kill掉这些问题
通过查资料发现在 org.apache.shiro.web.filter.authz.AuthorizationFilter下有
onAccessDenied方法,源码:

protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException {
        Subject subject = this.getSubject(request, response);
        if (subject.getPrincipal() == null) {
            this.saveRequestAndRedirectToLogin(request, response);
        } else {
            String unauthorizedUrl = this.getUnauthorizedUrl();
            if (StringUtils.hasText(unauthorizedUrl)) {
                WebUtils.issueRedirect(request, response, unauthorizedUrl);
            } else {
                WebUtils.toHttp(response).sendError(401);
            }
        }

        return false;
    }

重写此方法即可解决重定向的问题
随即

public class RestAuthorizationFilter extends PermissionsAuthorizationFilter {

    @Override
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException {
        response.setContentType("application/Json");
        response.setCharacterEncoding("UTF-8");
        Subject subject = this.getSubject(request, response);
        if (subject.getPrincipal() == null) {
            response.getWriter().print(ResponseUtil.response(CodeAndMsgEnum.DIDNOTLOGIN, null));
        } else {
            String unauthorizedUrl = this.getUnauthorizedUrl();
            if (StringUtils.hasText(unauthorizedUrl)) {
                WebUtils.issueRedirect(request, response, unauthorizedUrl);
            } else {
                response.getWriter().print(ResponseUtil.response(CodeAndMsgEnum.PERMISSION_FAILD, null));
            }
        }

        return false;
    }
}

当无权限/需要登录的的时候返回一个json字符串即可(图中效果为Object.toString() 的效果)

3.最终效果:

未登录:

"没有登录"

无权限:

"无权限"

欢迎关注我的博客 小海博客

最后

以上就是漂亮秀发为你收集整理的shiro前后端分离中的跳转问题的全部内容,希望文章能够帮你解决shiro前后端分离中的跳转问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部