【发布时间】:2011-10-31 06:04:31
【问题描述】:
Spring Security 插件提供了一个名为“springSecurityService”的 bean,类型为 grails.plugins.springsecurity.SpringSecurityService。我需要重写此服务的getCurrentUser 方法。
我首先尝试使用扩展来做到这一点
class CustomSecurityService extends SpringSecurityService {
@Override
Object getCurrentUser() {
// my implementation uses methods from the parent class
}
}
为了将插件定义的 bean 替换为上述类的实例,我将以下内容添加到 resources.groovy
springSecurityService(CustomSpringSecurityService)
但这不起作用,因为没有设置 SpringSecurityService(我正在扩展的类)的依赖项,所以我得到 NullPointerExceptions。未设置这些依赖项的原因是不再有 SpringSecurityService 类型的 spring bean
所以,然后我转向委托:
import grails.plugins.springsecurity.SpringSecurityService as PluginSpringSecurityService
class CustomSpringSecurityService {
@Autowired @Delegate
PluginSpringSecurityService pluginSpringSecurityService
Object getCurrentUser() {
// my implementation uses methods from pluginSpringSecurityService
}
}
然后我在resources.groovy中定义了两个bean
springSecurityService(CustomSpringSecurityService)
pluginSpringSecurityService(grails.plugins.springsecurity.SpringSecurityService)
在第二次尝试中,我再次希望名为“springSecurityService”的 bean 引用 CustomSpringSecurityService,但我还需要一个类型为 grails.plugins.springsecurity.SpringSecurityService 的 bean,因为我对 getCurrentUser 的实现使用了该 bean 的一些其他方法.
但是,我再次发现 pluginSpringSecurityService 的依赖关系没有被设置。在依赖注入的上下文中,是否有更简单的方法来覆盖插件提供的 bean 的方法?
【问题讨论】:
标签: spring grails groovy spring-security