Spring数据休息 - 有没有办法限制支持的操作?

时间:2017-02-28 10:43:11

标签: spring spring-boot spring-data spring-data-rest

我想在Spring(SpringBoot)应用程序中将数据作为Restful API公开。 Spring Data Rest似乎非常适合此活动。

此数据库对我的应用程序需求是只读的。默认提供所有HTTP方法。是否有可用于限制(实际上阻止)其他方法暴露的配置?

2 个答案:

答案 0 :(得分:23)

来自Hiding repository CRUD methods上的Spring文档:

  

16.2.3。隐藏存储库CRUD方法

     

如果您不想公开保存或删除方法   CrudRepository,你可以使用@RestResource(exported = false)   通过覆盖要关闭和放置的方法进行设置   覆盖版本的注释。例如,要防止HTTP   用户从调用CrudRepository的删除方法,覆盖所有   他们并将注释添加到重写方法。

@RepositoryRestResource(path = "people", rel = "people")
interface PersonRepository extends CrudRepository<Person, Long> {

  @Override
  @RestResource(exported = false)
  void delete(Long id);

  @Override
  @RestResource(exported = false)
  void delete(Person entity);
}
     

将两个删除方法重写为导出器非常重要   目前使用一种有点天真的算法来确定哪个CRUD   为了更快的运行时性能而使用的方法。不是   目前可以关闭带ID的删除版本   但是保留导出实体实例的版本。为了   暂时,您可以导出删除方法。如果你   想要关闭它们,然后记住你必须注释它们   export = false的版本。

答案 1 :(得分:8)

截至2018年初,现在有ability to only expose repository methods explicitly declared for exposureDATAREST-1176

请参阅RepositoryRestConfiguration

Export false at Type level does not allow overriding with export true at Method level票证(DATAREST-1034)已打开,但已作为DATAREST-1176的副本关闭。奥利弗吉尔克说:

  

我将根据DATAREST-1176的版本解决此问题   现在可以随时重新打开,以防万一你需要的其他东西。

它们不是完全相同的,1034中描述的功能会更加用户友好,但现在至少有一些选项。