Springboot Druid 自定义加密数据库密码的几种方案

 更新时间:2020年12月22日 09:22:38   作者:Raye  
这篇文章主要介绍了Springboot Druid 自定义加密数据库密码的步骤,帮助大家更好的理解和使用springboot,感兴趣的朋友可以了解下

前言

开发过程中,配置的数据库密码通常是明文形式,这样首先第一个安全性不好(相对来说),不符合一个开发规范(如项目中不能出现明文账号密码),其实就是当出现特殊需求时,比如要对非运维人员开方服务器部分权限,但是又涉及项目部署的目录时,容易泄漏数据库密码,虽然一般生产环境中,数据库往往放入内网,访问只能通过内网访问,但是不管怎么说账号密码直接让人知道总归不好,甚至有些项目需要部署到客户环境中,但是可能共用一个公共数据库(数据库只向指定服务器开放外网端口或组建内网环境),这样的情况下,如果数据库密码再以明文形式存在,就非常危险了,常见的避免这些方式据我了解有2种

第一种:通过网络获取密码

这种是让密码通过接口获取,当然接口中可以做加密认证,但是如果是把获取地址和认证放在了配置文件中,那么稍微用心也能获取到密码,不过也可以跟第二种方法配合使用

第二种:密码加密

通过对密码加密,使得配置文件中配置的密码为密文,从而提升安全性,当然网络获取密码也可以获取加密后的密码,而国内常用的数据库连接池是Druid,所以此文主要是针对Druid的数据库密码加密方案,Druid默认再带了一个密码加密,所以Druid加密密码也有2种方案

Druid加解密密码的2种方案

第一种:自带加密

优点:简单快捷,配置方便,无需改动代码(只需要改动配置文件即可)

缺点:自欺欺人式加密,因为密码和公钥都需要配置到配置文件中,只要别人有了配置文件,看出来了你是用的Druid,就可以用druid进行解密

第二种:自行加解密

优点:相对更安全,可以自行实现加解密

缺点:需要改动源码,另外只要有对应源码和配置文件也能解密,所以如果团队中想要控制其他成员不能获取到生产环境中的数据库密码,那么成员就不能有生产环境中的配置文件

自行加解密实现

Druid原生支持自行实现加解密,只需要实现解密类,然后配置对应解密类即可,首先编写类继承DruidPasswordCallback,在setProperties方法中解密密码,我的解密代码如下(代码中有伪代码,不能直接复制使用,需要先替换伪代码):

/**
 * 解密数据库密码回调
 * @author Raye
 * @since 2020-12-21
 */
@Slf4j
public class DBPasswordCallback extends DruidPasswordCallback {

  @Override
  public void setProperties(Properties properties) {
    super.setProperties(properties);
    //获取配置文件中的已经加密的密码
    String pwd = (String)properties.get("password");
    if (StringUtil.isNotEmpty(pwd)) {
      try {

        //这里的代码是将密码进行解密,并设置
        String password = (解密密码)
        setPassword(password.toCharArray());
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
}

配置解密类

用了自行加解密之后,还需要在application.yml中配置解密的类,具体添加配置如下

spring: 
 datasource:
  druid:
   connection-properties: password=${spring.datasource.druid.password}
   password-callback-class-name: 对应包名.DBPasswordCallback

注意配置中有伪代码,也就是加2个配置,其中connection-properties是一个map结构的配置,用;分割,可以自行定义其中key和value的值,最终会封装成对象传入DBPasswordCallback 类的setProperties方法中,password-callback-class-name则是配置解密回调的类,也就是我们的DBPasswordCallback 类,需要跟包名一起设置,上面代码中报名用伪代码代替了,需要替换

以上就是Springboot 配合Druid实现自定义加解密数据库密码的配置方法,具体加解密本身的方法采用那种方法根据实际情况选择即可

到此这篇关于Springboot Druid 自定义加密数据库密码的几种方案的文章就介绍到这了,更多相关Springboot Druid 自定义加密数据库密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java经典排序算法之二分插入排序详解

    Java经典排序算法之二分插入排序详解

    这篇文章主要为大家详细介绍了Java经典排序算法之二分插入排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • SpringBoot+ECharts是如何实现数据可视化的

    SpringBoot+ECharts是如何实现数据可视化的

    今天带大家学习的是关于Java的相关知识,文章围绕着SpringBoot+ECharts怎么实现数据可视化展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • 详解分别用Kotlin和java写RecyclerView的示例

    详解分别用Kotlin和java写RecyclerView的示例

    本篇文章主要介绍了详解分别用Kotlin和java写RecyclerView的示例,详解分别用Kotlin和java写RecyclerView的示例
    2017-12-12
  • 教你用Springboot实现拦截器获取header内容

    教你用Springboot实现拦截器获取header内容

    项目中遇到一个需求,对接上游系统是涉及到需要增加请求头,请求头的信息是动态获取的,需要动态从下游拿到之后转给上游,文中非常详细的介绍了该需求的实现,需要的朋友可以参考下
    2021-05-05
  • Springboot基础之RedisUtils工具类

    Springboot基础之RedisUtils工具类

    本文来说下RedisUtils工具类,主要介绍了整合Redis、MyBatis,封装RedisUtils工具类等知识,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • Java中常见的并发控制手段浅析

    Java中常见的并发控制手段浅析

    所谓并发控制就是帮助我们程序员更容易的让线程之间合作,让线程之间相互配合来满足业务逻辑,这篇文章主要给大家介绍了关于Java中常见的并发控制手段的相关资料,需要的朋友可以参考下
    2021-08-08
  • Java文件基本操作总结

    Java文件基本操作总结

    今天给大家带来的是关于Java基础的相关知识,文章围绕着Java文件操作展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Spring Boot实现模块化的几种方法

    Spring Boot实现模块化的几种方法

    模块可以是业务模块,为应用程序提供一些业务服务,或者为几个其他模块或整个应用程序提供跨领域关注的技术模块。这篇文章主要介绍了Spring Boot实现模块化,需要的朋友可以参考下
    2018-07-07
  • 解决Java中的强制类型转换和二进制表示问题

    解决Java中的强制类型转换和二进制表示问题

    这篇文章主要介绍了解决Java中的强制类型转换和二进制表示问题,需要的朋友可以参考下
    2019-05-05
  • java实现时钟表盘

    java实现时钟表盘

    这篇文章主要为大家详细介绍了java实现时钟表盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09

最新评论