Spring Data REST 通过存储库中定义的方法公开数据和操作。这一切都很好,花花公子。然而,我们有一个用例,我们需要控制可以基于用户和角色调用的内容和操作(HTTP 方法)。关于如何解决这个问题的任何指示?
可以使用 Oauth2 为 REST API 添加安全性。
Spring Data REST 通过存储库中定义的方法公开数据和操作。这一切都很好,花花公子。然而,我们有一个用例,我们需要控制可以基于用户和角色调用的内容和操作(HTTP 方法)。关于如何解决这个问题的任何指示?
可以使用 Oauth2 为 REST API 添加安全性。
Spring Data Github 中有一个示例。
请查看https://github.com/spring-projects/spring-data-examples/tree/master/rest/security。
除了在 Spring Security Configuration 级别保护的@JR Utily正确答案之外,另一个选项是使用 Spring DATA Rest Event Handlers,它允许添加更多操作,如下例所示。
只需在注解中使用 PrePost Spring 的安全注解定义和注解 Handler
@Component
@RepositoryEventHandler(Item.class)
public class ItemEventHandler {
private Logger logger = LoggerFactory.getLogger(ItemEventHandler.class);
@HandleBeforeCreate
@Preauthorize("hasRole('ROLE_ADMIN') or hasAuthority('ACTION_CREATE_ITEM')")
public void handleItemBeforeCreate(Item item) {
//POST operation available for ADMINs and Users with ACTION_CREATE_ITEM privilege
logger.info("Creating item: " + item.toString());
//more stuff if neccessary
}
@HandleBeforeSave
@Preauthorize("hasRole('ROLE_ADMIN') or hasAuthority('ACTION_UPDATE_ITEM')")
public void handleItemBeforeSave(Item item) {
//PUT operation available for ADMINs and Users with ACTION_UPDATE_ITEM privilege
logger.info("Updating item: " + item.toString());
//more stuff if neccessary
}
@HandleBeforeDelete
@Preauthorize("hasRole('ROLE_ADMIN') or hasAuthority('ACTION_DELETE_ITEM')")
public void handleItemBeforeDelete(Item item) {
//DELETE operation available for ADMINs and Users with ACTION_DELETE_ITEM privilege
logger.info("Deleting item: " + item.toString());
//more stuff if neccessary
}
}
这是 Spring DATA Rest 事件处理程序的完整列表:
在Spring DATA Rest Reference 中找到有关事件处理的更多信息