【发布时间】:2015-06-06 12:35:47
【问题描述】:
在我的 Spring Boot 应用程序中,我有一个带有以下方法的 REST 控制器:
@PreAuthorize("hasAnyRole('PERMISSION_UPDATE_OWN_COMMENT', 'PERMISSION_UPDATE_ANY_COMMENT')")
@RequestMapping(value = "/update", method = RequestMethod.POST)
public CommentResponse updateComment(@AuthenticationPrincipal User user, @Valid @RequestBody UpdateCommentRequest commentRequest) {
Comment comment = commentService.updateComment(commentRequest.getCommentId(), commentRequest.getTitle(), commentRequest.getContent(), user);
return new CommentResponse(comment);
}
只有PERMISSION_UPDATE_OWN_COMMENT 或PERMISSION_UPDATE_ANY_COMMENT 的用户才能使用此端点。
在此方法中,我需要创建两个不同的流程 - 一个用于具有PERMISSION_UPDATE_OWN_COMMENT 权限的用户,另一个用于具有PERMISSION_UPDATE_ANY_COMMENT 权限的用户。
所以我的问题是 - 为了在单个方法中实现这些不同的逻辑流,Spring 安全性的最佳实践是什么?
我是否应该在 updateComment 方法内部验证用户是否拥有一个或另一个权限并基于此条件实现我的逻辑?
【问题讨论】:
-
另一种方法是扩展请求映射机制,以便您可以为每个角色实现单独的方法。请参阅此处了解起点:stackoverflow.com/a/18313976/1356423。这里似乎还有一个项目,其中包含一个自定义“角色映射”注释的示例,这似乎正是您所需要的。 github.com/rstoyanchev/spring-mvc-31-demo
-
谢谢,我也试试!