grails – 隐藏数据库密码使用编解码器规范在datasource.groovy不工作

我在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文件.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...