方法级别 Spring 引导的角色和权限

Roles and Permission at method level Spring boot

我需要在方法级别获得授权,以便只有具有适当权限的用户才能访问它。该方法将包含一个令牌作为参数。我需要通过令牌进行 API 调用并获取用户电子邮件 ID。获得电子邮件 ID 后,我需要从数据库中获取用户的角色和权限。然后,如果用户具有适当的角色,我将调用该方法,否则 return 403 错误。

有没有办法在 spring 启动时完成此操作?我将有多种授权背后的方法,并希望在方法级别有某种注释。

谢谢。

@PreAuthorize注解就是你想要的

spring方法级授权请阅读以下link baeldung method authorization

您还需要理解 SPEL(Spring 表达式语言),因为这是 PreAuthorize 方法作为参数获取的内容,link 可以在 here

中找到

请注意 spring 使用 SecurityContext 获取用户数据(角色等),这意味着用户已经通过登录(身份验证)阶段并为该用户加载了 SecurityContext

示例:

//other annotations 
@PreAuthorize("hasRole('ROLE_VIEWER')") // hasRole('ROLE_VIEWER') -> this is SPEL
public ResponseEntity<String> methodName() {
 //method
}   

您可以将@PreAuthorize 与更多弹性一起使用:-

@PreAuthorize("@securityService.hasPermission({'PERMISSION_1'})")

和服务:-

@Component("securityService")
public class SecurityService {
    public boolean hasPermission(PermissionEnum... permissions) {

        Collection<? extends GrantedAuthority> authorities = SecurityContextHolder.getContext().getAuthentication()
                .getAuthorities();

        for (PermissionEnum permission : permissions) {
            if (authorities.contains(new SimpleGrantedAuthority(permission.toString))) {
                return true;
            }
        }
        return false;
    }
}

你想怎么造就怎么造。
更多