java @PostAuthorize和@PostFilter注解的有效用例

dy1byipe  于 2023-09-29  发布在  Java
关注(0)|答案(2)|浏览(120)

我们刚刚从2.0.8迁移到Spring Security3.0.8(不能升级到最新版本3.2.X,因为我们的核心spring库还在3.0.X上,我们计划在业务允许的时候再升级)。
我知道我们现在有了用于保护@PreAuthorize@PostAuthorize@Secured@PreFilter@PostFilter等方法的注解。
我理解@PreAuthorize的使用,这真的很有意义。但是想不出任何有效的用例来使用@PostAuthorize@PostFilter注解?
使用过它的人能给我解释一下使用它们的合理用例吗?
提前感谢!

neskvpey

neskvpey1#

@PostAuthorize@PostFilter通常与ACL结合使用。@PostAuthorize会在返回一些没有访问权限的对象时生成异常,而@PostFilter会删除没有访问权限的对象(通常在返回元素集合时很有用)。

ahy6op9u

ahy6op9u2#

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

}

相关问题