加密Grails Config和DataSource文件中的一些文本

时间:2016-02-01 20:12:35

标签: grails grails-plugin

我需要一个受信任的插件或一种方法来加密Grails 配置文件中的某些文本以及 DataSource 中的数据库密码。因为它们是敏感数据,例如电子邮件用户名和密码。 有没有一种强大而可靠的方式来做到这一点

2 个答案:

答案 0 :(得分:3)

不是通过插件,但可以将这些敏感的配置设置隐藏在外部文件中,然后在外部文件上设置适当的文件权限,以便只有特定用户才能访问它们。

Config.groovy内,有一个外部configuration files的设置:

grails.config.locations = [
    "classpath:${appName}/externalDb.properties",
    ...
]

DataSource.groovy内,典型的安排可能是:

dataSource {
    username = "yourUser"
    password = "yourPassword"
    ...
}

externalDb.properties(受文件系统保护)中,您将拥有用户名/密码/电子邮件/等。重写:

dataSource.username = "prodUser"
dataSource.password = "secret1!"

您可以将Config.groovy设置保留在原位,只有在找到外部配置文件时才会覆盖它们。您可以通过使用prod上的外部文件并依赖开发环境的Config.groovy设置来利用此优势;您也可以将此逻辑应用于每个环境使用不同的外部配置文件(我们在工作时使用JNDI,但我认为这种内置grails功能更加容易)。

答案 1 :(得分:1)

以下是我们如何做到的

我们在Config.Groovy中定义了密码,如下所示

password = DESCodec.decode("String Returned by the output of encode")




class DESCodec {
    def static encode = { String target ->
        def cipher = getCipher(Cipher.ENCRYPT_MODE)
        return cipher.doFinal(target.bytes).encodeBase64() as String
    }

    def static decode = { String target ->
        def cipher = getCipher(Cipher.DECRYPT_MODE)
        return new String(cipher.doFinal(target.decodeBase64())) as String
    }

    private static getCipher(mode) {
        def keySpec = new DESKeySpec(getPassword())
        def cipher = Cipher.getInstance("DES")
        def keyFactory = SecretKeyFactory.getInstance("DES")
        cipher.init(mode, keyFactory.generateSecret(keySpec))
        return cipher
    }

    private static getPassword() {
        "testsaltString".getBytes("UTF-8")
    }


    static void main(args) {

        println args
        if(args.length == 1) {
            println encode(args[0])
        } else {

             println decode(args[1])
        }
    }
}
  

从命令行运行

     

groovy DESCodec.groovy'password'

     

获取字符串的密文,并使用密文   配置文件......