从 Spring Security Expressions 调用静态方法?
Posted
技术标签:
【中文标题】从 Spring Security Expressions 调用静态方法?【英文标题】:Calling static methods from Spring Security Expressions? 【发布时间】:2011-11-26 23:45:06 【问题描述】:我正在寻找一种方法来扩展 Spring Security Expressions 以支持现有的安全基础设施。我知道您可以按照here 的描述扩展 MethodSecurityExpressionRoot,但我还发现reference 通过 Spring 表达式语言(Spring EL 或 SpEL)直接调用静态方法。不幸的是,Spring Expression 方法中的official page 没有直接描述如何执行此操作。
如何通过 Spring Expression 方法调用静态方法?
【问题讨论】:
【参考方案1】:通过使用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')
【讨论】:
如何将方法参数的属性作为目标方法的参数之一传递? @JinKwonT(java.util.Collections).singleton(#yourArg)
以上是关于从 Spring Security Expressions 调用静态方法?的主要内容,如果未能解决你的问题,请参考以下文章
spring-security-oauth2 - 从资源服务器检查ClientDetails
Grails - grails-spring-security-rest - 无法从 application.yml 加载 jwt 机密
Spring-security 阻止匿名用户从 MongoDB 中提取数据