【问题标题】:Using Spring Security ACL with Spring Data REST将 Spring Security ACL 与 Spring Data REST 一起使用
【发布时间】:2014-12-20 04:22:55
【问题描述】:

我正在尝试授权 Spring Data REST 公开的 api。到目前为止,我能够进行基于角色的授权,即:

@RepositoryRestResource(path = "book")
public interface BookRepository extends JpaRepository<Book, Long> {

    @PreAuthorize("hasRole('ROLE_ADMIN')")
    <S extends Book> Book save(Book book);
}

同样在同一个项目中,我有一个具有 ACL 机制的服务层,它正在工作。

我无法将 PostFilter 表达式与 Spring Data REST 一起使用,即:

@PostFilter("hasPermission(filterObject, 'read') or hasPermission(filterObject, admin)")
List<Book> findAll();

如果有人将 ACL 与 Spring Data REST 一起使用,那将非常有帮助。

注意:我知道以下未解决的问题:

https://jira.spring.io/browse/DATAREST-236

https://jira.spring.io/browse/SEC-2409

【问题讨论】:

    标签: spring-data-jpa spring-data-rest spring-security-acl


    【解决方案1】:

    使用 JpaRepository 是隐藏 List findAll() 方法。然后我使用了 CrudRepository,并应用了 PostFilter。

    有关更多详细信息,GitHub 上提供了示例项目: https://github.com/charybr/spring-data-rest-acl

    基于 ACL 的授权适用于 Spring Data REST 公开的以下实体。

    import org.springframework.data.repository.CrudRepository;
    import org.springframework.data.rest.core.annotation.RepositoryRestResource;
    import org.springframework.security.access.method.P;
    import org.springframework.security.access.prepost.PostFilter;
    import org.springframework.security.access.prepost.PreAuthorize;
    
    @RepositoryRestResource(path = "book")
    public interface BookRepository extends CrudRepository<Book, Long> {
    
        @PreAuthorize("hasRole('ROLE_ADMIN') or hasPermission(#book, 'write')")
        <S extends Book> Book save(@P("book") Book book);
    
        @Override
        @PostFilter("hasPermission(filterObject, 'read') or hasPermission(filterObject, admin)")
        Iterable<Book> findAll();
    }
    

    【讨论】:

    • 您先生值得一票(甚至一年半之后),因为您花时间来发布您自己问题的答案。谢谢!
    • 如何在 findAll() 函数中使用 @PostAuthorize 根据可分页数组中的单个实体值过滤结果?
    • @W.M.对于可分页的@PostAuthorize 不是一个好主意。请参考docs.spring.io/spring-security/site/docs/4.0.x/reference/…
    猜你喜欢
    • 2017-11-07
    • 2020-04-10
    • 2017-05-20
    • 2020-11-02
    • 1970-01-01
    • 2011-01-15
    • 2014-02-15
    • 2017-07-29
    • 2014-03-10
    相关资源
    最近更新 更多