我正在外部化Grails 3.x中的.YML文件。使此工作的代码如下:

在我的Application.groovy中,我正在从EnvironmentAware接口(interface)实现setEnviroment方法。

@Override
void setEnvironment(Environment environment) {
    try {
        String configPath = System.properties["local.config.location"]
        def ymlConfig = new File(configPath)
        Resource resourceConfig = new FileSystemResource(ymlConfig)
        YamlPropertiesFactoryBean ypfb = new YamlPropertiesFactoryBean()
        ypfb.setResources(resourceConfig)
        ypfb.afterPropertiesSet()
        Properties properties = ypfb.getObject()
        environment.propertySources.addFirst(new PropertiesPropertySource("local.config.location", properties))
    } catch (Exception e) {
        log.error("unable to load the external configuration file", e)
    }
}

我已经在构建中将bootRun任务编辑为:
bootRun {
    jvmArgs = ['-Dlocal.config.location=external-config.yml']
}

当打印出setEnvironment方法中的值时,实际上是从加载的对象读取并添加了属性。

现在是有趣的部分。当我将此代码添加到原始application.yml文件中时:
---
grails:
    plugin:
        springsecurity:
            securityConfigType: 'InterceptUrlMap'
            interceptUrlMap: [
                {pattern: '/**',               access: ['permitAll']}
            ]
            providerNames: ['ldapAuthProvider', 'anonymousAuthenticationProvider']
            ldap:
                context:
                    managerDn: 'uid=admin,ou=system'
                    managerPassword: 'secret'
                    server: 'ldap://localhost:10389'
                authorities:
                    groupSearchBase: 'ou=Groups,dc=aye,dc=com'
                    retreiveGroupRoles: true
                    retreiveDatabaseRoles: false
                    groupSearchFilter: 'member={0}'
                search:
                    base: 'ou=Users,dc=aye,dc=com'
            password:
                algoritham: 'SHA-256'
---

一切正常。当我将其剪切并粘贴到外部yml文件中时,在Firefox中出现了这个漂亮的错误。

grails - 外部化的Grails 3 Spring Security Config-LMLPHP

我可以说出所提供的代码中的配置是正确的,因为我可以添加更多的角色和过滤器,并且在原始application.yml文件中时一切正常。仅当从外部文件读取时,此操作才会失败。如果我从两个.yml文件.ofc中删除了安全代码,则我的页面看起来很奇怪,但是firefox错误消失了。

有谁知道为什么会这样?

最佳答案

您可以尝试测试它是否有效的一件事是将您的external-config.yml文件重命名为application.yml。我相信,除非另有说明,否则默认名称应为application。

This article here shows a good example of its correct use

执行此操作时,请尝试读取其中一个类中的属性,以确保yml文件正在合并。您可以使用以下命令读取这些属性:

grailsApplication.config.getProperty("grails.plugin.springsecurity.securityConfigType")

或者,您可以使用Holders实用程序将它们全部打印出来
def config = Holders.config

关于grails - 外部化的Grails 3 Spring Security Config,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35922958/

10-14 16:19