Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring @预授权JpaRepository_Spring_Spring Security_Spring Data Jpa_Spring Data Rest - Fatal编程技术网

Spring @预授权JpaRepository

Spring @预授权JpaRepository,spring,spring-security,spring-data-jpa,spring-data-rest,Spring,Spring Security,Spring Data Jpa,Spring Data Rest,我希望为我的REST服务实现基于角色的安全性。我正在使用spring数据rest,并已将JpaRepository配置为: @Repository @RestResource(path = "changesets", rel = "changesets") public interface ChangesetRepository extends JpaRepository<Changeset, Long> { } @存储库 @RestResource(path=“changeset

我希望为我的REST服务实现基于角色的安全性。我正在使用spring数据rest,并已将
JpaRepository
配置为:

@Repository
@RestResource(path = "changesets", rel = "changesets")
public interface ChangesetRepository extends JpaRepository<Changeset, Long> { }
@存储库
@RestResource(path=“changesets”,rel=“changesets”)
公共接口ChangesetRepository扩展了JpaRepository{}
我想将
@PreAuthorize
注释附加到继承的
Page findAll(Pageable Pageable)
方法,以便GET需要特定角色


有办法吗?我是否需要提供自定义实现,还是缺少一些明显的内容?

您可以为所有存储库添加自己的父类(请参阅)。然后只需添加所有必要的注释,您的安全限制将应用于所有子bean


从体系结构的角度来看,大多数情况下,存储库不是应用安全限制的合适位置。您的服务层更合适(因为您的安全限制取决于您的业务操作,而不是数据加载逻辑)。考虑下面的示例:您希望在许多服务中重用相同的存储库,并且安全规则(对于这些服务)不相同。怎么办?

如果您使用的是Spring Data REST您的想法是合理的。在接口类中,只需重新定义相同的方法并向其添加
@PreAuthorize
注释。代码应该是这样的,尽管我没有测试它

@Repository
@RestResource(path = "changesets", rel = "changesets")
public interface ChangesetRepository extends JpaRepository<Changeset, Long> { 

@PreAuthorize("#pk == authentication.id") 
Page<Changeset> findAll(Pageable pageable);

}
@存储库
@RestResource(path=“changesets”,rel=“changesets”)
公共接口ChangesetRepository扩展了JpaRepository{
@预授权(“pk==authentication.id”)
页面findAll(可分页可分页);
}