模块化Spring安全核心并在Private插件中休息,以便可以重复使用

时间:2015-02-03 05:29:23

标签: grails plugins spring-security grails-plugin

我们在许多应用程序中大量使用spring安全核心和rest插件。因此,我们不是在每个应用程序中配置它,而是决定创建一个私有插件来执行此功能,方法是Burt's blog to convert grails application to plugins

私有插件的BuidConfig.groovy中指定的spring安全核心和休息。 我们创建了MyCoreConfig.groovy文件,并在其中包含了所有spring安全核心和rest配置,因此我们可以将此配置与Main应用程序配置合并。

问题是包装插件时排除了BuildConfig.groovy,Config.groovy和resources.groovy(我们有customUserDetailsS​​ervice bean)等配置文件。所以我们按照以下方式合并配置和资源文件

def doWithSpring = {
    // TODO Implement runtime spring config (optional)
    mergeConfig(application)

    userDetailsService(com.organisation.app.CustomUserDetailsService){
            grailsApplication = ref('grailsApplication')
    }

}

def onConfigChange = { event ->
    // TODO Implement code that is executed when the project configuration changes.
    // The event is the same as for 'onChange'.
    this.mergeConfig(application)
}

private void mergeConfig(GrailsApplication app) {
    ConfigObject currentConfig = app.config.grails.myCoreConfig
    ConfigSlurper slurper = new ConfigSlurper(Environment.getCurrent().getName());
    ConfigObject secondaryConfig = slurper.parse(app.classLoader.loadClass("MyCoreConfig"))
    ConfigObject config = new ConfigObject();
    config.putAll(secondaryConfig.myCoreConfig.merge(currentConfig))
    app.config.grails.myCoreConfig= config;
}

当所有配置文件和资源文件位于各自的位置时,插件工作正常。

当我们通过评论来自Config.groovy的配置来测试插件,以便从新创建的MyCoreConfig.groovy中删除它并删除resources.groovy以便从doWithSpring关闭时,spring security的核心和休息功能不起作用。

我们甚至将插件打包为jar并包含在我们的主应用程序中,并且正如预期的那样它也不起作用。

这种方法是在私有插件中提取常见功能,这取决于公共插件是否正确?

我们哪里出错?

人们是否在每个应用程序中单独配置Spring安全核心或休息,或者他们是否遵循不同的方法来实现这一目标?

任何正确方向的指针都会有很大的帮助。

非常感谢。

0 个答案:

没有答案