【Spring Boot 快速入门】二十三、Spring Boot 数据库配置和账户信息安全保护
前言
嗨大家好,相信很多开发的小伙伴在接触到项目的时候,如果查询项目的配置文件的话,大部分的数据库的ip、端口、账户名称和账户口令都是明文的,那么如果项目打包发布出去,如果进行解压之后,直接就提取到数据库明文信息了,这样是很不安全的,今天就学习一种Spring Boot 数据库链接和账户信息安全保护方式基于Mybatis-Plus进行的数据库配置安全防护示例。
快速开始
Mybatis-Plus提供了一种保护数据库配置及数据安全的方式,能够在一定程度上减少数据库配置导致敏感信息泄露的问题。需要注意的是需要Mybatis-Plus3.3.2 及以上版本才开始支持。随机密钥请负责人妥善保管,当然越少人知道越好,这样才能更好的保护。
引入依赖
在使用Mybatis-Plus进行数据库配置铭感信息加密的时候,首先需要引入对应的依赖文件,如下是基于3.3.2版本进行演示的依赖信息。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
初始化秘钥及加密数据库配置文件
当引入配置文件之后,我们就可以设置初始化秘钥了,需要将初始化的秘钥交给专人负责,并且要牢记防止丢失。通过调用AES.generateRandomKey 获取随机秘钥进行加密。我们针对数据库的URL、数据库用户名、数据库指令进行加密。如下是需要加密的明文信息。
public static void main(String[] args) {
//公众号:Java全栈架构师
// 生成 16 位随机AES密钥
String randomKey = AES.generateRandomKey();
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull";
//作者:小阿杰
String userName = "test";
String passWord = "123456";
// 加密url
String urlInfo = AES.encrypt(url, randomKey);
// 加密userName
String userNameInfo = AES.encrypt(userName, randomKey);
// 加密passWord
String passWordInfo = AES.encrypt(passWord, randomKey);
System.out.println("密钥 == " + randomKey);
System.out.println("加密后的url == " + urlInfo);
System.out.println("加密后的userName == " + userNameInfo);
System.out.println("加密后的passWord == " + passWordInfo);
}
加密完成之后,我们将加密之后的数据库配置信息设置到配置文件中即可,如下是初始化的数据库配置加密信息。
密钥 == c0c7f05fb1a43687
加密后的url == 0wq5dyXkP3uy16ZUWOarD8DFRVGqy6pxlEZRp13CF2JpCxMN4vExc+no9zVbdFhVXYuGeM6UFqYP74tja18ja70oh0xR4EkDp+3hhRW8xHmJdhIBCoKxx1Bud609sySUhL1k/eyBSdW+QOsHe21dbg==
加密后的userName == kBUIivUbkYU/fbowlKuDrQ==
加密后的passWord == uVM2hxgda3In1YBTD+R8kg==
设置配置文件
上面我们已经将数据库明文进行加密了,把加密之后的信息放到配置文件中。需要注意的是加密的信息配置必须以 mpw: 字符串开头。如下:
server.port=8888
swagger.enable=true
mybatis.mapper-locations=classpath*:mapper/**/*.xml
spring.datasource.url=mpw:0wq5dyXkP3uy16ZUWOarD8DFRVGqy6pxlEZRp13CF2JpCxMN4vExc+no9zVbdFhVXYuGeM6UFqYP74tja18ja70oh0xR4EkDp+3hhRW8xHmJdhIBCoKxx1Bud609sySUhL1k/eyBSdW+QOsHe21dbg==
spring.datasource.username=mpw:kBUIivUbkYU/fbowlKuDrQ==
spring.datasource.password=mpw:uVM2hxgda3In1YBTD+R8kg==
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
启动类
剩下的就没有什么特殊的地方了,按正常的项目开发即可。编写启动类。
@SpringBootApplication
@MapperScan(value = "com.example.demo.mapper")
public class DemoBootMybatisDataSecurityApplication {
//小阿杰
public static void main(String[] args) {
SpringApplication.run(DemoBootMybatisDataSecurityApplication.class, args);
}
}
示例UserController
编写一个用户管理的测试接口,包含两个根据用户名获取用户和获取所有用户。
@Api(description = "用户管理")
@RequestMapping("user")
@RestController
public class UserController {
@Resource
private UserService userService;
//小阿杰
@ApiOperation(value = "根据用户名获取用户")
@RequestMapping(value = "getAllUser",method = RequestMethod.POST)
public User getAllUser(@RequestBody UserDto userDto){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(User::getNickName,userDto.getUserName());
User user = userService.getOne(queryWrapper);
return user;
}
//公众号:Java全栈架构师
@ApiOperation(value = "获取所有用户")
@GetMapping(value = "getUserList")
public List<User> getUserList(){
List<User> user = userService.getUserList();
return user;
}
}
启动项目
当项目开发完成,启动项目的时候,需要设置指定参数为我们的秘钥信息。Jar 启动参数在不同环境中设置方式不同,在开发环境中 idea 设置 Program arguments 即可, 在服务器可以设置为启动环境变量 即可。本文在开发环境中IDEA设置。
如果编辑启动配置
在设置启动参数的地方Program arguments设置指定的秘钥信息,需要将“=”后换成自己的秘钥信息。点击应用即可启动项目。
--mpw.key=c0c7f05fb1a43687
测试
项目启动之后,访问接口,两个接口都能查询到指定的信息,好了基于Mybatis-Plus进行的数据库配置安全防护示例就完成了。
结语
好了,以上就是Spring Boot 数据库配置和账户信息安全保护的示例,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。
作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。
转载自:https://juejin.cn/post/7067912172864536607