本文为Spring Boot2.1系列的第七篇,代码可以从github下载 https://github.com/yinww/demo-springboot2.git
对数据库的用户名和密码进行保护的重要性不用赘述,如果直接写在配置文件中,容易造成数据库密码被人获取,可能导致严重后果,本文介绍使用jasypt对数据库配置加密。
本文在第六篇 集成Hikari连接池 的基础上,主要描述针对集成jasypt需要做的变化。
一、引入依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
二、对数据库密码进行加密
jasypt官网提供了工具能对文本进行加密,下载后可本地命令行使用。
这里介绍通过程序进行加密的办法:
application.properties 添加配置
jasypt.encryptor.password=Centyun666
Controller 添加一个接口
@Autowired
private StringEncryptor stringEncryptor;
@RequestMapping(value = "/encrypt/{value}")
public String encrypt(@PathVariable String value) {
String encrypt = stringEncryptor.encrypt(value);
return encrypt;
}
启动程序后,访问 http://localhost:8080/encrypt/root
HGCrhmTercY/FbFLihiwew==
这就是jasypt使用密钥Centyun666对明文root进行加密后的密文。将该密文配置到application.properties文件中
spring.application.name=demo007
jasypt.encryptor.password=Centyun666
# jdbc_config datasource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo007?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=GMT%2B8
spring.datasource.username=root
# root / root
spring.datasource.password=ENC(HGCrhmTercY/FbFLihiwew==)
# Hikari will use the above plus the following to setup connection pooling
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=UserHikariCP
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1
mybatis.typeAliasesPackage=com.yinww.demo.springboot2.demo007.domain
mybatis.mapperLocations=classpath:mapper/*.xml
重新启动程序后,添加数据
查看数据库,可以看到数据已经保存成功
mysql> select * from user;
+----+-----------+
| id | name |
+----+-----------+
| 1 | 张三丰 |
+----+-----------+
1 row in set (0.00 sec)
至此对数据库的密码进行了保护。如果在浏览器中多次访问加密接口,会发现相同的明文得到的密文是不一样的。
本文内容到此结束,更多内容可关注公众号: