40

我正在寻找一种方法来扩展 Spring Security Expressions 以支持现有的安全基础设施。我知道您可以按照此处所述扩展 MethodSecurityExpressionRoot ,但我还找到了通过 Spring 表达式语言(Spring EL 或 SpEL)直接调用静态方法的参考。不幸的是,Spring Expression 方法的官方页面并没有直接描述如何做到这一点。

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

4

1 回答 1

72

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

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

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

T(java.util.Collections).singleton('Hello')
于 2011-09-28T15:41:43.540 回答