springboot 动态加密数据源url、用户名、密码等
使用 jasypt技术 对 配置文件中的敏感信息进行加密
可以访问官网 http://www.jasypt.org/howtoencryptuserpasswords.html
对应的github地址 https://github.com/ulisesbocchio/jasypt-spring-boot
- 在项目pom中引入依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>1.16</version>
</dependency>
- 查看官方文档我们可以看出,有一个配置是必须要配的,在我们的项目yml配置密钥

- 就以上两步说明加密在我们项目中已经配置成功了,接下来我们看如何使用它。写一个测试接口类,如下:
package com.test.api.controller;
import org.apache.commons.lang3.StringUtils;
import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Author: Mr sheng.z
* @Description:
* @Date: Create in 13:29 2019/10/18
*/
@RestController
@RequestMapping(value = "/test")
@ResponseBody
public class test {
@Autowired
StringEncryptor encryptor;
@RequestMapping(value = "/encrypt",method = RequestMethod.GET)
public String encrypt(@RequestParam("encryptId") String encryptId) {
if(StringUtils.isNotBlank(encryptId)){
return "加密成功,密文为: "+encryptor.encrypt(encryptId);
}else{
return "原始密码不能为空";
}
}
@RequestMapping(value = "/decrypt",method = RequestMethod.GET)
public String decrypt(@RequestParam("decryptId") String decryptId) {
if(StringUtils.isNotBlank(decryptId)){
return "解密成功,原始密码为: "+encryptor.decrypt(decryptId);
}else{
return "加密后密码不能为空";
}
}
}
我们可以单独访问接口,不管是加密或者接口都可以正常返回。注意:我们在每次加密的结果都不一样,解密的结果是一样的。
- 根据上面明文的加密结果,我们替换我们yml中的配置,记住我们替换原始密文的时候,外面需要用ENC(…)括起来,不要问为什么使用ENC,这是官方约定俗成的,把得到的密文写到需要使用到的地方,格式如下:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: ENC(65kIT8+ez18kZ01Gvp1UQq79Dd2Ci9Jbfd8cP/SB0qH9LYv2CrcQGutI+DVJRcVNFAj71+R5y7utUW6j02EAJg==)
username: ENC(cFzamMmx8SIZ287xbAekpg==)
password: ENC(Epzczby34gAwn5Shlr4u3A==)
type: com.alibaba.druid.pool.DruidDataSource
5.按照如上一顿操作配置的话,基本上数据源或者敏感信息加密就OK了。
6.有没有发现密钥和配置文件是放在一起的,这样不安全,我们可以单独在启动类中设置password,这样分开放的好处显而易见。

需要注意的点:
1.jasypt.encryptor.password 密钥必须配置,否则会报错
2.springboot2.x以下的版本,只能用jasypt1.x的版本,否则会报错
本文介绍了在SpringBoot项目中如何利用jasypt库动态加密数据源的URL、用户名和密码。首先,引入jasypt-spring-boot的依赖,并在配置文件中设置加密密钥。接着,通过测试接口验证加密和解密功能的正确性。最后,提醒读者在实际应用中,为了安全性,可以在启动类中设置加密密码,而不是将其与配置文件放在一起。
894

被折叠的 条评论
为什么被折叠?



