注意:如果你创建了一个用户,并为这个用户授予了一个角色,但这个角色并未关联任何的 授权字符串,那么调用数据库获得的结果是 List perms=[null],此时 perms已经被初始化,里面只有一个属性null,使用判空的方法无法判别,此时继续遍历会报出空指针异常,此时应当添加判断条件 perms.get(0)!=null

    1. // 自定义Realm
    2. public class CustomerRealm extends AuthorizingRealm {
    3. @Override
    4. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    5. //获取身份信息
    6. String primaryPrincipal = (String) principalCollection.getPrimaryPrincipal();
    7. System.out.println("调用授权验证:" + primaryPrincipal);
    8. //根据主身份信息获取角色 和 权限信息
    9. UserService userService = (UserService) ApplicationContextUtils.getBean("userService");
    10. User user = userService.findRolesByUserName(primaryPrincipal);
    11. //授权角色信息
    12. if (!CollectionUtils.isEmpty(user.getRoles())){
    13. SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
    14. user.getRoles().forEach(role -> {
    15. simpleAuthorizationInfo.addRole(role.getName());
    16. //权限信息
    17. List<Perms> perms = userService.findPermsByRoleId(role.getId());
    18. if(!CollectionUtils.isEmpty(perms)){
    19. perms.forEach(perm -> {
    20. simpleAuthorizationInfo.addStringPermission(perm.getName());
    21. });
    22. }
    23. });
    24. return simpleAuthorizationInfo;
    25. }
    26. return null;
    27. }
    28. @Override
    29. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
    30. //根据身份信息
    31. String principal = (String) authenticationToken.getPrincipal();
    32. //在工厂中获取service对象
    33. UserService userService = (UserService) ApplicationContextUtils.getBean("userService");
    34. User user = userService.findByUserName(principal);
    35. if(!ObjectUtils.isEmpty(user)){
    36. return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(),
    37. new MyByteSource(user.getSalt()), this.getName());
    38. }
    39. return null;
    40. }
    41. }