我需要在方法级别获得授权,以便具有适当权限的用户只能访问它。该方法将包含一个标记作为参数。我需要通过令牌进行 API 调用并获取用户电子邮件 ID。获得电子邮件 ID 后,我需要从数据库中获取用户的角色和权限。然后,如果用户具有适当的角色,则调用该方法,否则返回 403 错误。
有没有办法在 Spring Boot 中完成这项工作?我将在授权后有多种方法,并希望在方法级别有某种注释。
谢谢。
我需要在方法级别获得授权,以便具有适当权限的用户只能访问它。该方法将包含一个标记作为参数。我需要通过令牌进行 API 调用并获取用户电子邮件 ID。获得电子邮件 ID 后,我需要从数据库中获取用户的角色和权限。然后,如果用户具有适当的角色,则调用该方法,否则返回 403 错误。
有没有办法在 Spring Boot 中完成这项工作?我将在授权后有多种方法,并希望在方法级别有某种注释。
谢谢。
@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
}
您可以将@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;
}
}
你可以随心所欲地制作它。
更多