前言:我有一个使用spring-boot
(Maven项目)开发的JAR。然后,我将访问我的JAR文件夹并运行以下命令来执行它:
java -server -jar ${jarName}
--spring.config.location=classpath:config.properties
因此,我的JAR从属性文件中读取{key, value}
对,并相应地执行代码。这没有问题,但是我的config.properties
文件中没有几个属性,该属性具有可直接连接到Oracle数据库的数据库详细信息。它还具有我的应用程序超级管理员用户名和密码。
我不想将此代码推送到bit-bucket/stash/git
,因为它已存储了我的所有密码。
解决方法:我可以使用空密码将代码推送到git/stash
,然后运行以下命令,通过--spring.config.location
命令注入属性文件,如下所示
java -server -jar ${jarName}
--spring.config.location=./config.properties
问题:如何在Spring应用程序中加密和解密字符串/密码?
我想将密码以加密格式存储在属性文件中,然后通过我的代码将其解密并连接到Oracle数据库和应用程序。
答案 0 :(得分:4)
通常,这些类型的配置文件应在.gitignore中列出,而不应推送到存储库中。此外,如果您想先加密然后再解密,则没有理由将其推送。但是,如果存在通用配置,则可能要推送该配置并将凭据存储在另一个未推送的文件中。
一个例子:
application.properties
:您希望推送到存储库的常用属性database.properties
:属性必须保密并在本地计算机上.gitignore
database.properties
然后,您可以使用Spring批注在运行时加载属性文件。
@PropertySource(value = { "application.properties", "database.properties" })
答案 1 :(得分:3)
通常,我将这种配置放入服务器的环境变量中。 您可以将$ application.properties中的密码替换为$ {MY_PASSWORD},然后将密码放入环境变量中(对docker很有帮助)。
您还可以使用两个文件,一个带有dev数据库密码的application-dev.properties和一个application-prod.properties,其中引用了环境变量以简化开发。
答案 2 :(得分:1)
我将应用程序用户名和密码存储在服务器中的文本文件中。然后,我使用插件对它们进行加密和解密,并在我的应用程序中使用。这样,我可以将整个代码签入git,而根本没有密码。