23

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

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

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

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

提前致谢!

4

2 回答 2

24

Both the @PostAuthorize and @PostFilter are used, mostly, in combination with ACL. Where the @PostAuthorize will generate an exception if something is returned which one hasn't access to, the @PostFilter will remove the objects one doesn't have access to (in general useful when returning collections of elements).

于 2014-02-28T12:51:24.450 回答
5

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

}
于 2015-10-29T01:58:39.607 回答