安全的CRUD端点

时间:2019-10-21 12:32:36

标签: spring-boot spring-security

我想使用角色保护由以下人员自动创建的CRUD端点:

@RepositoryRestResource(collectionResourceRel = "user", path = "user"), 

定义所有内容的antmatchers和hasAuthority非常容易,但是随着应用程序的增长,我无法为每个存储库端点提供antmatchers,总是返回并编辑安全配置是不可持续的。 为了清楚起见,我正在寻找类似@RepositoryRestResource的注释,并在这个类似的注释中定义可能哪些角色连接到存储库中的哪些方法,例如:

@SomeAnnotation(Post.Method.hasAuthority(PRODUCT-UPDATE),Delete.Method.hasAuthority(PRODUCT-DELETE),

当前存储库如下:


public interface UserRepository extends MongoRepository<User,String>
{

    User findByFirstName(@Param("firstName") String firstName);
    User findByLastName(@Param("lastName") String lastName);
    User findByUserName(@Param("userName") String userName);
}

1 个答案:

答案 0 :(得分:0)

我猜您正在寻找@PreAuthorize。因此,您的仓库可能看起来像:

@RepositoryRestController
@RequestMapping("/user")
public interface UserRepository extends MongoRepository<User,String>
{

    @GetMapping("/byFirstName")
    @PreAuthorize("hasAuthority('ROLE_CLIENT') and #oauth2.hasScope('viewUser')")
    User findByFirstName(@Param("firstName") String firstName);

    @PostMapping("/save")
    @PreAuthorize("hasAuthority('ROLE_ADMIN')")
    Long save(@Param("user") @RequestBody User user);    
}

有关更多详细信息,请参见this guide