0

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

有没有办法在 Spring Boot 中完成这项工作?我将在授权后有多种方法,并希望在方法级别有某种注释。

谢谢。

4

2 回答 2

1

@PreAuthorize 注释是你想要的

请阅读以下链接获取 spring 方法级别授权 baeldung 方法授权

您还需要了解 SPEL(Spring Expression Language),因为这是 PreAuthorize 方法作为参数得到的,链接可以在这里找到

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

例子:

//other annotations 
@PreAuthorize("hasRole('ROLE_VIEWER')") // hasRole('ROLE_VIEWER') -> this is SPEL
public ResponseEntity<String> methodName() {
 //method
}   
于 2020-08-11T08:54:32.970 回答
1

您可以将@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;
    }
}

你可以随心所欲地制作它。
更多

于 2021-08-29T14:52:49.340 回答