Zac*_*ack 10 java spring annotations spring-security spring-annotations
作为spring注释的新手,我需要澄清下面的代码.
@PostFilter("hasPermission(filterObject, 'READ') or hasRole('ROLE_ADMIN')")
public List<User> getUsers(String orderByInsertionDate,
Integer numberDaysToLookBack) throws AppException
Run Code Online (Sandbox Code Playgroud)
;
所以这意味着getUsers返回的用户列表将只包含那些"READ"对调用对象具有完全访问权限或者调用对象具有角色的元素"ROLE_ADMIN".谢谢.
vto*_*tor 16
@PreFilter并@PostFilter指定与Spring安全性一起使用,以便能够根据授权过滤集合或数组.
要使其工作,您需要在spring安全性中使用基于表达式的访问控制(如您的示例中所示)
@PreFilter - 在执行方法之前过滤集合或数组.
@PostFilter - 在执行方法后过滤返回的集合或数组.
所以,假设您getUser()返回用户列表.Spring Security将遍历列表并删除所有应用表达式为false的元素(例如,不是admin,并且没有读取权限)
filterObject是内置对象,在其上执行过滤操作,您可以将各种条件应用于此对象(例如principal,基本上所有内置表达式都可用authentication),例如,您可以执行此操作
@PostFilter ("filterObject.owner == authentication.name")
Run Code Online (Sandbox Code Playgroud)
虽然这些过滤器很有用,但对于大型数据集来说效率非常低,而且基本上你失去了对结果的控制,而Spring控制着结果.
| 归档时间: |
|
| 查看次数: |
9343 次 |
| 最近记录: |