当前位置: 首页 > 后端技术 > Java

SpringBoot加密配置属性

时间:2023-04-01 21:59:37 Java

1.背景在系统运行过程中,有很多配置属性,比如:数据库配置,阿里云配置等,这些配置的一些属性比较敏感,不应该直接写在里面plaintext以某种方式出现在配置文件中,所以对于这些配置我们需要对其进行加密。2、需求现在我们的系统中有如下数据库配置,其中数据库密码和数据库url属于敏感配置,需要在配置文件中加密显示,不能明文显示。#该属性的值需要加密显示spring.datasource.url=jdbc:mysql://127.0.0.1:3306/seata_account?useUnicode=true&characterEncoding=utf8&autoReconnectForPools=true&useSSL=falsespring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.用户名=root#该属性的值需要加密,以显示spring.datasource.password=root配置的加密。我们使用github上的开源项目https://github.com/ulisesbocchio/jasypt-spring-boot来实现。三、实现步骤一、引入jar包com.github.ulisesbocchiojasypt-spring-boot-starter3.0.42、configurationencryption配置viapplication.properties#加密密钥,这个值很重要,建议make一个系统环境变量或者传入jasypt.encryptor.password=123456789jasypt.encryptor.property.prefix=ENC(jasypt.encryptor.property.suffix=)jasypt.encryptor.string-output-type=base64注意:上面有一个jasypt.encryptor.password配置属性。该属性的值建议在启动jar包时通过-D参数执行,而不是写在配置文件中。三、加密属性1、获取加密属性的值。encrypted属性由maven插件官方提供,代码加密。在这里,代码用于加密。我们在引入jasypt-spring-boot-starterjar包的时候,自动配置了一个StringEncryptor实例,可以用来对属性进行加解密。我们还可以提供StringEncryptor的这个实例来覆盖默认值。2.替换配置文件中的加密值4.查看运行结果从上图我们可以看出配置文件的属性是加密的。数据源可以得到正确的连接。配置在程序运行时被解密。4.完整代码https://gitee.com/huan1993/spring-cloud-parent/tree/master/springboot/springboot-encrypt-config5.参考链接1.https://github.com/ulisesbocchio/jasypt-spring-引导