我有一个配置类提供的静态布尔值。根据此变量的值,我希望允许或拒绝对端点的访问。
下面的尝试不幸地导致了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。但我正在寻找一个更简单的解决方案,如果存在的话。
感谢您的帮助
1条答案
按热度按时间goqiplq21#
尝试不使用
#{...}
; javadoc说这个字符串应该是一个SpEL表达式。#{...}
语法用于当String属性是一个文字并且Spring将表达式计算为String时。看起来@ConditionalOnExpression
忽略了分隔符,但@PreAuthorize
并不期望它们。可能有点矛盾,但是...
此外,在SpEL中,
#foo
是对求值上下文中的变量foo
的引用(这是{
是意外的提示)。