我在dataource.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类放在grails中的Utility包中,当我尝试启动服务器时,它不会启动但是直接关闭,当我直接放入正确的密码并注释掉编解码器和加密字符串时,它将启动.我假设没有找到编解码器类/我在配置中丢失的任何东西,如指定编解码器类需要引号或任何路径更改,或者我应该更改算法,通过DESCodec类是最后一个编解码器类链接.
我正在努力使配置环境特定和外部化,但我仍然需要密码在这里加密,然后在连接到数据库之前进行解密.
解决方法
我认为最好的方法是外部环境特定的配置(特别是密码,但是URL,电子邮件地址等),然后在目标机器的文件系统上保护具有适当权限的配置文件.
在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文件.