Spring Data REST通过存储库中定义的方法公开数据和操作。这一切都很好,花花公子。但是我们有一个用例,我们需要控制可以根据用户和角色调用的内容和操作(HTTP方法)。有关如何处理此问题的任何指示?
使用Oauth2可以为REST API添加安全性。
答案 0 :(得分:1)
Spring Data Github中有一个例子 请查看https://github.com/spring-projects/spring-data-examples/tree/master/rest/security。
答案 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事件处理程序的完整列表: