spring - Grails 插件 bean 的重写方法

标签 spring grails groovy spring-security

Spring Security 插件提供了一个名为“springSecurityService”、类型为 grails.plugins.springsecurity.SpringSecurityService 的 bean。我需要重写此服务的 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

因此,我转向委托(delegate):

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 的依赖项没有被设置。是否有更简单的方法可以在受依赖注入(inject)的上下文中重写由插件提供的 bean 方法?

最佳答案

返回到子类化并重新定义 resources.groovy 中的 bean,但满足依赖关系。它们是按名称自动注入(inject)的,但全部列出,因此请将它们显式添加到您的重新定义中:

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

关于spring - Grails 插件 bean 的重写方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7132679/

相关文章:

grails - 无法使用 Eclipse (Grails 2.3.1) 安装 Grails 插件

javascript - pdf.js 在 getDocument 上失败

java - 同一个请求的不同执行时间

java - 在 Spring MVC + Postgres 上访问列元数据时出错

java - memcached 测试未按预期运行

java - thymeleaf 获得前 3 个对象

grails - 通过元类中的闭包替换带参数的方法

grails - 从 quartz 作业内的config.groovy(conf目录中的)访问变量

groovy - 如何向 Groovy/SwingBuilder 应用程序添加音效?

jenkins - 仅在主节点上 checkout 和运行 SCM 管道