为什么要使用"#post"而不是" post"在hasPermission中检查Spring Security

时间:2015-06-23 15:29:02

标签: java spring security spring-security spring-security-oauth2

我是春天安全的新手。在分析下面的代码更改时,我无法理解为什么"#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')

第一个参数应该是目标对象。

有人可以提供一些指示吗?欣赏它。谢谢。

1 个答案:

答案 0 :(得分:1)

Spring Expression Language(SpEL):

  

可以使用语法#variableName在表达式中引用变量。

使用类似@PreAuthorize的注释调用方法时,方法参数作为变量传递给SpEL。

如果省略#,Spring将在根对象中查找属性,在​​本例中为SecurityExpressionRoot。您可以在这里找到hasPermission方法。