Shiro清除指定用户权限

以前在做项目的时候,都已实现现成的权限控制,从来没有自己研究过原理,这次趁着新项目的机会自己研究了一下。

按照教程,查资料,大概实现了一个demo,然后卡在了权限的刷新上,比如,管理员给某个角色添加,删除了新的权限,怎么才能做到用户不登录实时刷新权限呢。

最后查API文档,以及在这位仁兄的博客中找到了答案:https://blog.csdn.net/s1040342522/article/details/109495704

在使用这个博客中的方法时,主要问题在于如何获取指定用户的SimplePrincipalCollection。

完整的代码见:https://github.com/alex-zhaopeng/demo.git

@RequestMapping("/logout")
    @ResponseBody
    public ReturnMessage logOut(@RequestBody Map<String, Object> map) {

        Subject subject = SecurityUtils.getSubject();
        String username = map.get("username").toString();
        List<UserVo> userVos = userService.findRolesByUsername(username);
        UserVo user = !CollectionUtils.isEmpty(userVos) ? userVos.get(0) : null;

        //获取指定用户的User对象,构造SimplePrincipalCollection,然后将当前subject伪装成指定用户,然后再进行缓存清除
        SimplePrincipalCollection principals = new SimplePrincipalCollection(user,"AuthRealm");
        subject.runAs(principals);

        RealmSecurityManager rsm = (RealmSecurityManager)SecurityUtils.getSecurityManager();
        AuthRealm authRealm = (AuthRealm) rsm.getRealms().iterator().next();
        authRealm.clearCachedAuthorization(subject.getPrincipals());

        subject.releaseRunAs();
//        subject.logout();
        return ReturnMessage.successWithMsg("登出成功");
    }

 

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zp_xyz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值