我是春天安全的新手。在分析下面的代码更改时,我无法理解为什么"#post"用来代替" post" ?为什么单词" post"前缀为"#"?帖子是一个对象。
@PreAuthorize("hasPermission(#post, 'MANAGER') or hasRole('ROLE_MODERATOR')")
+ @PreAuthorize("hasPermission(#post, 'write') or hasRole('ROLE_MODERATOR')")
public void updateFullyPost(Post post) throws AppException;
我参考了Spring安全文档,并在下面找到了。
hasPermission(对象目标,对象权限) 如果用户有权访问给定权限的提供目标,则返回true。例如,hasPermission(domainObject,' read')
第一个参数应该是目标对象。
有人可以提供一些指示吗?欣赏它。谢谢。
答案 0 :(得分:1)
在Spring Expression Language(SpEL):
可以使用语法
#variableName
在表达式中引用变量。
使用类似@PreAuthorize
的注释调用方法时,方法参数作为变量传递给SpEL。
如果省略#
,Spring将在根对象中查找属性,在本例中为SecurityExpressionRoot
。您可以在这里找到hasPermission
方法。