为什么在 Spring 安全性的 hasPermission 中使用“#post”而不是 "post"
Why use "#post" instead of "post" in hasPermission check in Spring Security
我是 spring 安全方面的新手。在分析下面的代码更改时,我无法理解为什么使用 "#post" 而不是 "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(对象目标,对象权限)
Returns 如果用户有权访问给定权限的提供目标,则为真。例如,hasPermission(domainObject, 'read')
第一个参数应该是目标对象。
有人可以指点一下吗?欣赏它。谢谢。
在 Spring Expression Language (SpEL) 中:
Variables can be referenced in the expression using the syntax #variableName
.
当调用带有注释的方法时,如 @PreAuthorize
,方法参数将作为变量传递给 SpEL。
如果省略 #
,Spring 将在 根对象 中查找 属性,在本例中为 SecurityExpressionRoot
。这是您找到 hasPermission
方法的地方。
我是 spring 安全方面的新手。在分析下面的代码更改时,我无法理解为什么使用 "#post" 而不是 "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(对象目标,对象权限) Returns 如果用户有权访问给定权限的提供目标,则为真。例如,hasPermission(domainObject, 'read')
第一个参数应该是目标对象。
有人可以指点一下吗?欣赏它。谢谢。
在 Spring Expression Language (SpEL) 中:
Variables can be referenced in the expression using the syntax
#variableName
.
当调用带有注释的方法时,如 @PreAuthorize
,方法参数将作为变量传递给 SpEL。
如果省略 #
,Spring 将在 根对象 中查找 属性,在本例中为 SecurityExpressionRoot
。这是您找到 hasPermission
方法的地方。