我正在将 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 中得到了这个漂亮的错误。
我可以看出提供的代码中的配置是正确的,因为我可以添加更多角色和过滤器,并且在原始 application.yml 文件中一切正常。只有从外部文件读取时才会失败。如果我从两个 .yml 文件 .ofc 中删除安全代码,我的页面看起来很奇怪,但 firefox 错误消失了。
有没有人知道为什么会这样?
最佳答案
您可以尝试测试它是否有效的一件事是将您的 external-config.yml 文件重命名为 application.yml。我认为默认名称应该是应用程序,除非另有说明。
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 安全配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35922958/