0

我的应用架构是这样的:

MainWebApp 
  -> CustSecPlugin
    -> Spring-Security-Core

所以我有一个插件,我围绕 spring-security 插件提供额外的实现,这在许多 Web 应用程序中都很常见。我做的一件事是使用自定义UserDetailsService.

我已经遵循了这方面的指南,并且当自定义用户详细信息的 bean 在中定义时,我可以让我的自定义安全插件独立运行grails-app/conf/spring/resources.groovy

由于它是一个插件,因此无法读取此文件,因此我将 bean 移到了doWithSpring {}闭包中。这在独立运行时仍然有效。

但是我现在发现的是,当使用 webapp 运行时,我的自定义详细信息服务被忽略,并且 Principal 现在是标准 GrailsUser

如果我将我的 bean 定义移动到网络应用程序中,grails-app/conf/spring/resources.groovy那么它就可以工作。但是我不想在每个使用这个插件的应用程序中定义这些 bean

我不确定发生了什么。userDetailsService()当 bean 作为 Web 应用程序中的插件运行时,为什么会忽略 bean?我可以看到其他 bean 正在正确设置(打印出所有 bean 名称并让自己成为一个 dummy bean)。它几乎就像它再次被挫败一样。

有什么地方可以定义这个 bean 以使其绝对有效吗?

解决这个问题的最佳方法是什么?

4

1 回答 1

1

This is probably the load order of the plugins. You can change it in your plugin descriptor with:

def loadAfter = ["springSecurityCore"]

This will enforce that your beans will be loaded after the core plugin.

于 2013-11-27T17:36:35.307 回答