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

Ane*_*ran 12 java spring spring-security spring-security-acl

我们刚刚迁移到春季安全3.0.82.0.8(可"升级到latestversion这是3.2.X作为我们的核心Spring库仍然在3.0.x的,我们计划以后升级时,经营许可证).

据我所知,我们现在有注释为确保类似的方法@PreAuthorize,@PostAuthorize,@Secured,@PreFilter@PostFilter.

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

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

提前致谢!

M. *_*num 14

无论是@PostAuthorize@PostFilter使用居多,与ACL的组合.如果@PostAuthorize返回某个无法访问的内容,将生成异常,@PostFilter将删除无法访问的对象(通常在返回元素集合时很有用).


小智 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();
    
    @PreAuthorize("filterObject.owner == authentication.name")
    public void addBook(List<Book> books);

}
Run Code Online (Sandbox Code Playgroud)