【问题标题】:Grails Spring Security Custom User Details Beans getting overridenGrails Spring Security 自定义用户详细信息 Beans 被覆盖
【发布时间】:2013-12-13 11:30:21
【问题描述】:

我的应用架构是这样的:

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 名称并让自己成为一个 dummy bean)。它几乎就像它再次受到挫折。

我可以在哪里定义这个 bean 以使其绝对有效?

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

【问题讨论】:

    标签: grails groovy spring-security spring-bean


    【解决方案1】:

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

    def loadAfter = ["springSecurityCore"]
    

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

    【讨论】:

    • 我唯一的问题是我的内部插件为安全核心插件设置了配置参数。我发现如果我的包装器插件在核心之后加载,配置没有正确设置并且插件无法加载。我的插件中还有其他地方可以声明 bean 吗?
    • 对于配置,我通常使用插件Platform Core。它有一个闭包doWithConfig 来声明将与应用程序合并的配置。
    • 啊平台核心和负载的结合解决了我的问题,以前没见过这个插件。干杯
    猜你喜欢
    • 2012-05-23
    • 2021-09-09
    • 2017-06-05
    • 2017-12-11
    • 1970-01-01
    • 2015-03-09
    • 2011-06-24
    • 2012-07-20
    • 2016-03-27
    相关资源
    最近更新 更多