在 Grails 中使用自己的方法扩展 SpEL?
Posted
技术标签:
【中文标题】在 Grails 中使用自己的方法扩展 SpEL?【英文标题】:Extending SpEL with own methods in Grails? 【发布时间】:2012-10-05 23:39:27 【问题描述】:我想在 Grails 应用程序中添加自定义 SpEL 方法,就像在 this question 中为普通 Spring-Security 应用程序所做的那样,通过覆盖 EvaluationContext。这行得通吗?
如何将global-method-security
插入安全配置?我可以configure security,但是要在那里添加什么?像
grails.plugins.springsecurity =
'global-method-security'
'expression-handler'
ref("myMethodSecurityExpressionHandler")
?但是什么代码会解释它呢?
查看SpringSecurityCoreGrailsPlugin.groovy
也没有给我任何见解。
【问题讨论】:
【参考方案1】:仅当您还安装了 spring-security-acl 插件时才可用。它配置了expressionHandler
bean:
expressionHandler(DefaultMethodSecurityExpressionHandler)
parameterNameDiscoverer = ref('parameterNameDiscoverer')
permissionEvaluator = ref('permissionEvaluator')
roleHierarchy = ref('roleHierarchy')
trustResolver = ref('authenticationTrustResolver')
因此,如果您有自己的 DefaultMethodSecurityExpressionHandler
子类,您可以像这样替换 resources.groovy
中的 bean:
import com.mycompany.myapp.MyMethodSecurityExpressionHandler
beans =
expressionHandler(MyMethodSecurityExpressionHandler)
parameterNameDiscoverer = ref('parameterNameDiscoverer')
permissionEvaluator = ref('permissionEvaluator')
roleHierarchy = ref('roleHierarchy')
trustResolver = ref('authenticationTrustResolver')
【讨论】:
非常感谢。 ACL 插件可以做到这一点,但我的expressionHandler
从未被调用。应用程序的 resources.groovy
在插件的 configureExpressionBeans()/doWithSpring()
之前执行 - 所以我的 expressionHandler
可能被 ACL 覆盖。寻找解决方法。
没有设法让它接收到我的expressionHandler
- 显然 ACL 已实例化。我能做什么?
@VictorSergienko:成功了吗?我也有同样的情况。
遗憾的是,由于expressionHandler
的问题,它从未对我有用。以上是关于在 Grails 中使用自己的方法扩展 SpEL?的主要内容,如果未能解决你的问题,请参考以下文章
Spring-Cloud-Function-Spel 漏洞复现