Spring Boot如何在属性文件中隐藏密码
Spring Boot" title="Spring Boot">Spring Boot使用属性文件,并且至少在默认情况下,密码为纯文本。是否可以以某种方式隐藏/解密这些内容?
回答:
你可以使用Jasypt加密属性,因此可以使属性如下所示:
db.password=ENC(XcBjfjDDjxeyFBoaEPhG14wEzc6Ja+Xx+hNPrJyQT88=)
Jasypt允许你使用不同的算法对属性进行加密,一旦获得加密的属性,就可以将其放入ENC(...)
。例如,你可以使用终端通过Jasypt以这种方式进行加密:
encrypted-pwd$ java -cp ~/.m2/repository/org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="contactspassword" password=supersecretz algorithm=PBEWithMD5AndDES----ENVIRONMENT-----------------
Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 24.45-b08
----ARGUMENTS-------------------
algorithm: PBEWithMD5AndDES
input: contactspassword
password: supersecretz
----OUTPUT----------------------
XcBjfjDDjxeyFBoaEPhG14wEzc6Ja+Xx+hNPrJyQT88=
要使用Spring Boot轻松配置它,可以将其启动器jasypt-spring-boot-starter与组ID一起使用com.github.ulisesbocchio
请记住,你将需要使用用于加密属性的相同密码来启动应用程序。因此,你可以通过以下方式启动应用:
mvn -Djasypt.encryptor.password=supersecretz spring-boot:run
或使用环境变量:
export JASYPT_ENCRYPTOR_PASSWORD=supersecretzmvn spring-boot:run
你可以在下面的链接中查看更多详细信息:
https://www.ricston.com/blog/encrypting-properties-in-spring-boot-with-jasypt-spring-boot/
要在应用中使用加密的属性,只需照常使用即可,请使用任意一种方法(Spring Boot会发挥作用,无论如何,该属性当然必须在类路径中):
使用@Value
注释
@Value("${db.password}")private String password;
或使用 Environment
@Autowiredprivate Environment environment;
public void doSomething(Environment env) {
System.out.println(env.getProperty("db.password"));
}
更新:对于生产环境,为了避免在命令行中暴露密码,因为你可以使用ps,,先前的命令history等查询进程,你可以:
- 创建如下脚本:
touch setEnv.sh
- 编辑
setEnv.sh
以导出JASYPT_ENCRYPTOR_PASSWORD
变量
`#!/ bin / bash
导出JASYPT_ENCRYPTOR_PASSWORD = supersecretz`
- 执行文件
. setEnv.sh
- 在后台运行应用程序
mvn spring-boot:run &
- 删除档案
setEnv.sh
- 使用以下命令取消设置先前的环境变量:
unset JASYPT_ENCRYPTOR_PASSWORD
以上是 Spring Boot如何在属性文件中隐藏密码 的全部内容, 来源链接: utcz.com/qa/421859.html