0

Spring Data REST 通过存储库中定义的方法公开数据和操作。这一切都很好,花花公子。然而,我们有一个用例,我们需要控制可以基于用户和角色调用的内容和操作(HTTP 方法)。关于如何解决这个问题的任何指示?

可以使用 Oauth2 为 REST API 添加安全性。

4

2 回答 2

1

Spring Data Github 中有一个示例。
请查看https://github.com/spring-projects/spring-data-examples/tree/master/rest/security

于 2014-12-22T11:05:20.637 回答
0

除了在 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 事件处理程序的完整列表:

  • 创建前事件
  • 创建后事件
  • 保存前事件
  • AfterSave事件
  • 保存前事件
  • 链接保存事件之前
  • AfterLinkSaveEvent
  • 删除前事件
  • 删除后事件

在Spring DATA Rest Reference 中找到有关事件处理的更多信息

于 2016-06-22T10:27:19.107 回答