作为 Spring 安全注释的新手,我需要对以下代码进行澄清。
@PostFilter("hasPermission(filterObject, 'READ') or hasRole('ROLE_ADMIN')")
public List<User> getUsers(String orderByInsertionDate,
Integer numberDaysToLookBack) throws AppException
所以这意味着 getUsers 返回的用户列表将只包含那些具有完整的元素"READ"
访问调用对象或调用对象的角色为"ROLE_ADMIN"
。谢谢。
@PreFilter
and @PostFilter
被指定与 Spring security 一起使用,以便能够根据授权过滤集合或数组。
要实现此功能,您需要在 spring security 中使用基于表达式的访问控制(如示例中所示)
@预过滤器- 在执行方法之前过滤集合或数组。
@PostFilter- 执行方法后过滤返回的集合或数组。
那么,让我们说你的getUser()
返回用户列表。 Spring Security 将遍历列表并删除应用表达式为 false 的任何元素(例如不是管理员,并且没有读取权限)
filterObject 是执行过滤操作的内置对象,您可以对该对象应用各种条件(基本上所有内置表达式都可以在这里使用,例如principal
, authentication
),例如你可以这样做
@PostFilter ("filterObject.owner == authentication.name")
虽然这些过滤器很有用,但对于大型数据集来说,它的效率确实很低,而且基本上你失去了对结果的控制,而是 Spring 控制了结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)