使用datasource.groovy中的编解码器规范隐藏数据库密码不起作用

pri*_*dev 10 grails groovy

我这样做是在datasource.groovy中隐藏数据库密码

dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
username = "root"
password = "q59YgJCdHw3dshwlsa=="
passwordEncryptionCodec = DESCodec
dbname="mydbname"
}
Run Code Online (Sandbox Code Playgroud)

遵循artilce:http://jira.grails.org/browse/GRAILS-3620

我分别运行groovy编解码器类来获取加密字符串,如下所示:groovy grails-app/utils/DESCodec.groovy mypassword_string_text.

但是在将DESCodec类放在grails的Utility包中之后,当我尝试启动服务器时,它不会启动而是直接关闭,它会在我直接输入正确的密码并注释掉编解码器和加密字符串时启动.我假设它没有找到编解码器类/我在配置中缺少的任何其他内容,如指定编解码器类需要引号或任何路径更改,或者我应该更改算法,顺便说一下DESCodec类是最后一个编解码器类链接.

我正在努力使配置为特定于环境和外部化,但我仍然需要在此处加密密码,然后在连接到数据库之前解密.

dar*_*end 13

我认为最好的方法是外部化特定于环境的配置(特别是密码,但URL,电子邮件地址等),然后使用目标机器的文件系统上的适当权限保护配置文件.

在Config.groovy中(例如):

grails.config.locations = [
    "file:/etc/${appName}/conf/db.properties"
]
Run Code Online (Sandbox Code Playgroud)

并在配置文件中:

dataSource.username = "root"
dataSource.password = "secret"
Run Code Online (Sandbox Code Playgroud)

我通常为生产配置执行此操作,但为方便起见,请在Config.groovy中保留dev/test配置.在dev/test中运行时,如果找不到引用的配置文件,则只需在启动时收到警告.如果确实找到了,那么它将覆盖Config.groovy中的内容

这样做的另一个好处是,如果任何prod环境配置发生变化,不需要重新编译和重新部署war文件,只需更改配置文件并重新启动应用程序即可.