@PostAuthorize和@PostFilter注释的有效用例

时间:2014-02-28 10:50:33

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

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

我知道我们现在有注释来保护@PreAuthorize@PostAuthorize@Secured@PreFilter@PostFilter等方法。

我理解使用@PreAuthorize,这真的很有意义。但是,您不能想到使用@PostAuthorize@PostFilter注释的任何有效用例?

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

提前致谢!

2 个答案:

答案 0 :(得分:13)

@PostAuthorize@PostFilter都主要与ACL结合使用。如果@PostAuthorize将返回一个无法访问的内容,@PostFilter将生成异常,{{1}}将删除一个无法访问的对象(通常在返回元素集合时很有用) 。

答案 1 :(得分:1)

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

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

使用interface声明过滤器操作。

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);

}