我正在通过将数据库密码隐藏在datasource.groovy中
dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
username = "root"
password = "q59YgJCdHw3dshwlsa=="
passwordEncryptionCodec = DESCodec
dbname="mydbname"
}
跟随动脉:http://jira.grails.org/browse/GRAILS-3620我单独运行groovy编解码器类,以得到如下所示的加密字符串:
groovy grails-app/utils/DESCodec.groovy mypassword_string_text。
但是在将DESCodec类放到实用程序包中后,当我尝试启动服务器时,它将无法启动,但会直接关闭,而当我直接输入正确的密码并注释掉编解码器和加密的字符串时,它将启动。我假设它找不到编解码器类/配置中我缺少的其他任何东西,例如指定编解码器类需要引号或任何路径更改,或者我应该更改算法,因为DESCodec类是该类中的最后一个编解码器类关联。
我正在努力使配置针对特定环境和外部化,但是在连接数据库之前,我仍然需要在此先加密密码,然后再解密。
最佳答案
我认为,执行此操作的最佳方法是外部化特定于环境的配置(尤其是密码,但URL,电子邮件地址等),然后在目标计算机的文件系统上使用适当的权限来保护配置文件。
在Config.groovy中(例如):
grails.config.locations = [
"file:/etc/${appName}/conf/db.properties"
]
并在配置文件中:
dataSource.username = "root"
dataSource.password = "secret"
我通常对生产配置执行此操作,但为了方便起见,将dev/test配置保留在Config.groovy中。在dev/test中运行时,如果找不到引用的配置文件,则只会在启动时得到警告。如果找到它,它将覆盖Config.groovy中的内容
这具有额外的优点,即如果任何产品环境配置发生更改,则不需要重新编译和重新部署war文件,您只需更改配置文件并重新启动应用程序即可。
关于grails - 在datasource.groovy中使用编解码器规范隐藏数据库密码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8017027/