这是我自定义的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())这个方法可以查询到权限: