gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:23:39 26 4
gpt4 key购买 nike

我是 Spring Security 的新手。在分析下面的代码更改时,我无法理解为什么使用“#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 Security 文档并找到了以下内容。

hasPermission(对象目标,对象权限)如果用户有权访问给定权限所提供的目标,则返回 true。例如,hasPermission(domainObject, 'read')

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

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

最佳答案

Spring Expression Language (SpEL):

Variables can be referenced in the expression using the syntax #variableName.

当使用@PreAuthorize等注释调用方法时,方法参数将作为变量传递给SpEL。

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

关于java - 为什么在 Spring Security 的 hasPermission 检查中使用 "#post"而不是 "post",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31007076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com