likes
comments
collection
share

【Spring Boot 快速入门】二十三、Spring Boot 数据库配置和账户信息安全保护

作者站长头像
站长
· 阅读数 32

前言

  嗨大家好,相信很多开发的小伙伴在接触到项目的时候,如果查询项目的配置文件的话,大部分的数据库的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==

【Spring Boot 快速入门】二十三、Spring Boot 数据库配置和账户信息安全保护

设置配置文件

  上面我们已经将数据库明文进行加密了,把加密之后的信息放到配置文件中。需要注意的是加密的信息配置必须以 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

【Spring Boot 快速入门】二十三、Spring Boot 数据库配置和账户信息安全保护

启动类

  剩下的就没有什么特殊的地方了,按正常的项目开发即可。编写启动类。

@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设置。 如果编辑启动配置 【Spring Boot 快速入门】二十三、Spring Boot 数据库配置和账户信息安全保护

  在设置启动参数的地方Program arguments设置指定的秘钥信息,需要将“=”后换成自己的秘钥信息。点击应用即可启动项目。

--mpw.key=c0c7f05fb1a43687

【Spring Boot 快速入门】二十三、Spring Boot 数据库配置和账户信息安全保护

测试

  项目启动之后,访问接口,两个接口都能查询到指定的信息,好了基于Mybatis-Plus进行的数据库配置安全防护示例就完成了。

【Spring Boot 快速入门】二十三、Spring Boot 数据库配置和账户信息安全保护

【Spring Boot 快速入门】二十三、Spring Boot 数据库配置和账户信息安全保护

结语

  好了,以上就是Spring Boot 数据库配置和账户信息安全保护的示例,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。

  作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。

转载自:https://juejin.cn/post/7067912172864536607
评论
请登录