【问题标题】:override method of Grails plugin beanGrails插件bean的覆盖方法
【发布时间】: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


    【解决方案1】:

    返回子类化并重新定义resources.groovy 中的bean,但要满足依赖关系。它们是按名称自动注入的,但都已列出,因此请明确将它们添加到您的重新定义中:

    springSecurityService(CustomSpringSecurityService) {
       authenticationTrustResolver = ref('authenticationTrustResolver')
       grailsApplication = ref('grailsApplication')
       passwordEncoder = ref('passwordEncoder')
       objectDefinitionSource = ref('objectDefinitionSource')
       userDetailsService = ref('userDetailsService')
       userCache = ref('userCache')
    }
    

    【讨论】:

    • 谢谢伯特,这行得通。你知道为什么当我尝试委托方法时 SpringSecurityService 的依赖关系没有被自动装配吗?
    猜你喜欢
    • 2013-02-10
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2014-09-07
    • 1970-01-01
    • 2017-09-20
    相关资源
    最近更新 更多