【问题标题】:Valid use case for @PostAuthorize And @PostFilter annotations@PostAuthorize 和 @PostFilter 注释的有效用例
【发布时间】:2014-04-01 07:53:20
【问题描述】:

我们刚刚从 2.0.8 迁移到 Spring Security 3.0.8(可以升级到最新版本 3.2.X因为我们的核心 spring 库仍在 3.0.X 上,我们计划稍后在业务允许时升级)。

我知道我们现在有用于保护方法的注释,例如 @PreAuthorize@PostAuthorize@Secured@PreFilter@PostFilter

我了解@PreAuthorize 的用法,这确实很有意义。但是想不出任何可以使用@PostAuthorize@PostFilter 注释的有效用例?

有人可以向我解释一下使用它们的合理用例吗?

提前致谢!

【问题讨论】:

    标签: java spring spring-security spring-security-acl


    【解决方案1】:

    @PostAuthorize@PostFilter 大多与 ACL 结合使用。 @PostAuthorize 将在返回无法访问的内容时生成异常,@PostFilter 将删除无法访问的对象(通常在返回元素集合时很有用)。

    【讨论】:

    • 太棒了!谢谢你的解释。如果有例子就更好了,不过我还是接受答案!
    【解决方案2】:

    @PostFilter 执行方法后过滤返回的集合或数组。 Spring security 提供了一个名为 filterObject 的内置对象,@PostFilter 在其中执行过滤任务。

    @PostFilter 可以在服务层使用@PreAuthorize@PostAuthorize

    使用接口声明过滤操作。

    public interface IBookService {
    
        @PreAuthorize ("hasRole('ROLE_READ')")
        @PostFilter ("filterObject.owner == authentication.name")
        public List<Book> getBooks();
    
        @PreFilter("filterObject.owner == authentication.name")
        public void addBook(List<Book> books);
    
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 2010-10-31
      • 2014-04-22
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 2014-09-12
      • 2018-01-11
      • 1970-01-01
      相关资源
      最近更新 更多