如何在Spring Security的@PreAuthorize中评估静态布尔值?

0pizxfdo  于 2023-05-17  发布在  Spring
关注(0)|答案(1)|浏览(202)

我有一个配置类提供的静态布尔值。根据此变量的值,我希望允许或拒绝对端点的访问。
下面的尝试不幸地导致了SpelParseException(意外令牌。应为“identifier”,但为“lcurly({)')”:

@GetMapping({"/registration"})
@PreAuthorize("#{T(com.example.config.ApplicationProperties).REGISTRATION_ENABLE}")

public String registration() {
    //...
}

尝试以某种方式使适用于@ConditionalOnExpression的功能也适用于@PreAuthorize

@Component
@ConditionalOnExpression("#{T(com.example.config.ApplicationProperties).REVEAL_SECRETS}")
public class VerySecretStuff {
    //...
}

我的问题是:

有没有一种方法可以访问@PreAuthorize Spring EL表达式中的静态变量,并进行评估,然后用于访问?
我知道我们可以利用Spring Context并提供一个能够评估我们需求的bean。但我正在寻找一个更简单的解决方案,如果存在的话。

感谢您的帮助

goqiplq2

goqiplq21#

尝试不使用#{...}; javadoc说这个字符串应该是一个SpEL表达式。
#{...}语法用于当String属性是一个文字并且Spring将表达式计算为String时。看起来@ConditionalOnExpression忽略了分隔符,但@PreAuthorize并不期望它们。
可能有点矛盾,但是...
此外,在SpEL中,#foo是对求值上下文中的变量foo的引用(这是{是意外的提示)。

相关问题