我的应用架构是这样的:
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 以使其绝对有效吗?
解决这个问题的最佳方法是什么?