Grails 在datasource.groovy中使用编解码器规范隐藏数据库密码无效

Grails 在datasource.groovy中使用编解码器规范隐藏数据库密码无效,grails,groovy,Grails,Groovy,我通过执行以下操作将数据库密码隐藏在datasource.groovy中 dataSource { pooled = true driverClassName = "com.mysql.jdbc.Driver" username = "root" password = "q59YgJCdHw3dshwlsa==" passwordEncryptionCodec = DESCodec dbname="mydbname"

我通过执行以下操作将数据库密码隐藏在datasource.groovy中

dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
username = "root"
password = "q59YgJCdHw3dshwlsa=="
passwordEncryptionCodec = DESCodec
dbname="mydbname"
}
遵循艺术:

我单独运行groovy codec类以获得加密字符串,如下所示: groovy grails app/utils/DESCodec.groovy mypassword\u string\u text

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


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

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

在Config.groovy中(例如):

在配置文件中:

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


这还有一个额外的优点,即不需要重新编译和重新部署war文件。如果任何产品环境配置发生更改,您只需更改配置文件并重新启动应用程序。

我将Descodec类移动到utility/gra/reports目录中,并将该类作为import gra.reports.Descodec导入datasource.groovy中,它仍然不起作用..您好Darrend,我接受外部化变量是一种方法,但我仍然希望密码字符串即使在外部化的位置也进行加密。在Oracle连接字符串(如Oracle Wallet的“/”或“/@TWO_TASK”)的情况下,是否有任何方法可以避免指定dataSource.username、dataSource.password?
dataSource.username = "root"
dataSource.password = "secret"