我通过
隐藏了datasource.groovy中的数据库密码dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
username = "root"
password = "q59YgJCdHw3dshwlsa=="
passwordEncryptionCodec = DESCodec
dbname="mydbname"
}
跟随artilce:http://jira.grails.org/browse/GRAILS-3620
我分别运行groovy编解码器类来获取加密字符串,如下所示: groovy grails-app / utils / DESCodec.groovy mypassword_string_text。
但是在将DESCodec类放在grails的Utility包中之后,当我尝试启动服务器时,它不会启动而是直接关闭,它会在我直接输入正确的密码并注释掉编解码器和加密字符串时启动。我假设它没有找到编解码器类/我在配置中缺少的任何其他内容,如指定编解码器类需要引号或任何路径更改,或者我应该更改算法,顺便说一下DESCodec类是最后一个编解码器类链接。
我正在努力使配置成为特定于环境和外部化的,但我仍然需要在此处加密密码,然后在连接到数据库之前进行解密。
答案 0 :(得分:13)
我认为最好的方法是外部化特定于环境的配置(尤其是密码,但URL,电子邮件地址等),然后使用目标计算机文件系统上的适当权限保护配置文件。 / p>
在Config.groovy中(例如):
grails.config.locations = [
"file:/etc/${appName}/conf/db.properties"
]
并在配置文件中:
dataSource.username = "root"
dataSource.password = "secret"
我通常为生产配置执行此操作,但为方便起见,请在Config.groovy中保留dev / test配置。在dev / test中运行时,如果找不到引用的配置文件,则只需在启动时收到警告。如果确实找到了,那么它将覆盖Config.groovy中的内容
这样做的另一个好处是,如果任何prod环境配置发生变化,不需要重新编译和重新部署war文件,只需更改配置文件并重新启动应用程序。