使用Spring-security进行密码加密和解密

时间:2018-07-02 08:16:40

标签: java spring spring-boot spring-security spring-boot-maven-plugin

前言:我有一个使用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数据库和应用程序。

3 个答案:

答案 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,而根本没有密码。