Grails Spring安全自定义用户详细信息Bean被覆盖

时间:2013-11-27 17:19:36

标签: grails groovy spring-security spring-bean

我的应用程序架构是这样的:

MainWebApp 
  -> CustSecPlugin
    -> Spring-Security-Core

所以我有一个插件,我将spring-security插件包装起来,以提供在许多Web应用程序中常见的额外实现。我做的一件事是使用自定义UserDetailsService

我已按照相关指南进行操作,并且可以在grails-app/conf/spring/resources.groovy

中定义自定义用户详细信息的bean时,以独立方式运行自定义安全插件

此文件因其插件而无法读取,因此我将bean移动到doWithSpring {}闭包中。当独立运行时,这仍然有效。

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

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

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

有没有我可以定义这个bean以使其绝对有用的地方?

如何最好地解决这个问题?

1 个答案:

答案 0 :(得分:1)

这可能是插件的加载顺序。您可以使用以下命令在插件描述符中更改它:

def loadAfter = ["springSecurityCore"]

这将强制您的bean将在核心插件之后加载。