万里顾—程 2021-06-11 13:03 采纳率: 16.7%
浏览 92
已采纳

shiro整合springboot中,在realm中获取授权信息(perms)结果为null,求指点

这是我自定义的realm中的授权方法,其中的userService我是用手动注入的

 //授权
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        //获取用户认证时的主身份信息
        String primaryPrincipal = (String) principals.getPrimaryPrincipal();
        System.out.println("primaryPrincipal-->"+primaryPrincipal);

        UserService userService = (UserService)ApplicationContextUtils.getBean("userService");
        System.out.println(userService);

        User user = userService.queryRoleByName(primaryPrincipal);
        List<Role> roles = user.getRoles();
        //如果角色信息不为空
        if (!CollectionUtils.isEmpty(roles)){
            SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
            roles.forEach(role -> {//遍历出所有的role
                simpleAuthorizationInfo.addRole(role.getName());//把角色信息放进Authorizer进行比对

                //获取权限信息
                List<Perms> perms = userService.findAllPermsByRoleId(role.getId());

                System.out.println(perms);//[]

                if (!CollectionUtils.isEmpty(perms)&& perms.get(0)!=null ){
                    perms.forEach(perm -> {
                        simpleAuthorizationInfo.addStringPermission(perm.getName());

                    });
                }
            });
            return simpleAuthorizationInfo;
        }
        return null;
    }

我在debug上面的授权方法的时候,发现运行到

List<Perms> perms = userService.findAllPermsByRoleId(role.getId());这一行方法时,perms是一个空数组[],下面是我debug的截图

但是我又在springboot的测试类中进行测试,发现可以findAllPermsByRoleId(role.getId())这个方法可以查询到权限:

 

  • 写回答

1条回答 默认 最新

  • 小P聊技术 2021-06-11 14:19
    关注

    你测试类执行这个看看有数据不: 

    userService.findAllPermsByRoleId(0)
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效