从Spring Security Expressions调用静态方法?

问题描述 投票:28回答:1

我正在寻找一种方法来扩展Spring Security Expressions以支持现有的安全基础架构。我知道你可以扩展MethodSecurityExpressionRoot,如here所述,但我也发现reference通过Spring Expression Language(Spring EL或SpEL)直接调用静态方法。不幸的是,关于Spring Expression方法的official page并没有直接描述如何做到这一点。

如何通过Spring Expression方法调用静态方法?

spring spring-security spring-el
1个回答
51
投票

通过使用T(fully.qualified.name).methodName() syntax

您可以使用特殊的T运算符来指定java.lang.Class的实例(类型)。也可以使用此运算符调用静态方法。 StandardEvaluationContext使用TypeLocator查找类型,StandardTypeLocator(可以替换)是在了解java.lang包的基础上构建的。这意味着T()引用java.lang中的类型不需要完全限定,但所有其他类型引用必须是。

T元素返回对类型的引用而不是实例。例如,相当于Collections.singleton("Hello")

T(java.util.Collections).singleton('Hello')
© www.soinside.com 2019 - 2024. All rights reserved.