Spring Data REST - 内容&基于用户和行动的行动角色

时间:2014-01-15 17:07:26

标签: security customization spring-data-rest

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

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

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

对于在Spring安全配置级别保护的@JR Utily 正确答案,另一个选择是使用Spring DATA Rest事件处理程序,它允许添加更多操作,如下例所示。

在注释中使用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事件处理程序的完整列表:

  • BeforeCreateEvent
  • AfterCreateEvent
  • BeforeSaveEvent
  • AfterSaveEvent
  • BeforeSaveEvent
  • BeforeLinkSaveEvent
  • AfterLinkSaveEvent
  • BeforeDeleteEvent
  • AfterDeleteEvent

Spring DATA Rest Reference for event handling

中的更多信息