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

Password encrypt and decrypt using Spring-security

前言:我有一个使用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,然后 运行 下面的命令通过 [= 注入属性文件18=]命令如下

java -server -jar ${jarName}
--spring.config.location=./config.properties

问题:如何在spring应用程序中加密和解密String/password?

我想将密码存储在加密格式的属性文件中,然后通过我的代码对其进行解密并连接到 Oracle 数据库和我的应用程序。

通常,这些类型的配置文件应该列在 .gitignore 中,而不是推送到存储库。此外,如果你想加密然后再次解密它们,无论如何都没有理由推送它们。但是,如果存在通用配置,您可能希望推送该配置并将凭证存储在另一个未推送的文件中。

一个例子:

  • application.properties: 您希望推送到存储库的公共属性
  • database.properties: 在本地机器上保密的属性

.gitignore

database.properties

然后你可以使用Spring注解在运行时加载属性个文件。

@PropertySource(value = { "application.properties", "database.properties" })

一般我都是把这种配置放在服务器的环境变量里。 您可以将 application.properties 中的密码替换为 ${MY_PASSWORD},然后将密码放入环境变量中(对 docker 非常有帮助)。

您还可以使用两个文件,一个是应用程序-dev.properties,其中包含您的开发数据库密码,另一个是应用程序-prod.properties,其中包含对环境变量的引用,使开发更容易。

我将应用程序用户名和密码存储在服务器的文本文件中。然后我使用一个插件来加密和解密它们并在我的应用程序中使用。这样我就可以将整个代码签入 git ,它根本没有密码..