我们刚刚从 2.0.8 迁移到Spring Security 3.0.8 (可以'升级到 3.2.X 的最新版本因为我们的核心弹簧库仍然在 3.0.X ,我们计划稍后在业务许可时升级。
我知道我们现在有注释来保护@PreAuthorize
,@PostAuthorize
,@Secured
,@PreFilter
和@PostFilter
等方法。
我理解使用@PreAuthorize
,这真的很有意义。但是,您不能想到使用@PostAuthorize
或@PostFilter
注释的任何有效用例?
使用它的人可以向我解释使用它们的合理用例吗?
提前致谢!
答案 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);
}