我们在许多应用程序中大量使用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(我们有customUserDetailsService 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安全核心或休息,或者他们是否遵循不同的方法来实现这一目标?
任何正确方向的指针都会有很大的帮助。
非常感谢。