如何对SpringBoot项目配置文件中的敏感信息进行加密?在开发过程为了防止我们线上数据库密码通过配置文件被泄露,通常我们是需要对配置文件中的敏感信息进行加密的。 一种常用的方式是使用Jasypt库来加密配置文件。 使用过程也非常简单,对我们代码是 零代码侵入的。
首先,需要在项目的依赖中添加Jasypt库的引用,可以在pom.xml文件中添加以下依赖:
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.3</version></dependency>
然后,在application.properties(或application.yml)配置文件中,可以使用以下方式来加密配置项:
spring: redis: host: ENC(ySVuKHrY/ayelEtOF+jvGDJsrw/ulB0QtfehqdqPtmpg4blliJeCZZwejLPshpbr) port: 6379 password: ENC(2eRCNeso2fNaRGVZtX1NQNiax1EPyQfHvBKoXZHTbWOH4orHWKQN4rXognTIJzsOP0jvlMhuIbUDG4IJdD/Shp5WwIQmkKhT2VeSH8BnCsw=) datasource: url: ENC(aR44jS/u1L9aW4kWS2wuutyCWt21QBzFmEkUy4OtFyVDPP6kGMsBtIAhswoN3qRbhVsw3ZK8YhcVZjofnr8SIxSx4HGI/gYc323ltALoQqnYKb7ZYfgXVqVMzbjt+2BgAfEk+Ss16+eweOG0Ih4CJxqbkCa92Q84+ZJh0QAunTkM406WYuST60cBSIL9O6xt) username: ENC(WVc4EX5L/ljzT+ipluTiSuL8Uj33ogtP3t3TnqRZi75+tYXfTsYo6lDfB+cnjLvb) password: ENC(SnSV7uhLqeTMUMwzDRSBD+HirsW4gIm3ID3PlgWM1oOQELXFE/4TItyxfUuf2I9pqnloz3YZ/x2lhWzR5figRHZAoyeeTjRQkVNaS7Dayv0=)
其中,"ENC"是用于标识加密值的前缀。加密后的值可以使用Jasypt提供的工具来生成,代码如下:
public static void main(String[] args) { System.setProperty("jasypt.encryptor.password", "你的密码"); StringEncryptor stringEncryptor = new DefaultLazyEncryptor(new StandardEnvironment()); String encrypt = stringEncryptor.encrypt("42.192.171.172"); System.out.println("加密:" + encrypt); System.out.println("解密:" + stringEncryptor.decrypt(encrypt));}
最后,需要配置我们加密用的密码。我们也可以通过Jasypt 的配置文件来修改加密标识的前缀,配置信息如下:
jasypt: encryptor: password: 你的密码 property: prefix: "ENC[" suffix: "]"
说明:jasypt的密码不要放在application 文件中,如果放在这里的话加密就没有任何意义了。通常这个密码在java 应用启动的时候通过参数 -Djasypt.encryptor.password 来指定就可以了,做的权限分离。