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

前言

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

(0)

相关推荐

  • SpringBoot整合Druid数据源过程详解

    这篇文章主要介绍了SpringBoot整合Druid数据源过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.数据库结构 2.项目结构 3.pom.xml文件 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</ar

  • SpringBoot发现最新版Druid重大问题(坑)

    发现Druid问题 最近做项目,遇到大量插入的地方,经过大量的调试,最终发现是Druid连接池的问题,(以前一个大项目就遇到过Druid的坑),果断换成c3p0之后,压力测试哗哗上去了. 下面是更换c3p0方法. 1.修改pom.xml 导入c3p0依赖: <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.5

  • springboot集成druid连接池配置的方法

    在开发项目中如果数据库选型为mysql,很大概率下连接池会使用druid 这里介绍springboot集成durid springboot : 2.1.9 druid : 1.1.10 案例地址 github地址 springboot集成druid配置 需要引入的pom <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactI

  • SpringBoot整合Druid数据库连接池的方法

    一,Druid是什么? Druid是Java语言中最好的数据库连接池.Druid能够提供强大的监控和扩展功能. 二, 在哪里下载druid maven中央仓库: http://central.maven.org/maven2/com/alibaba/druid/ 三, 怎么获取Druid的源码 Druid是一个开源项目,源码托管在github上,源代码仓库地址是 https://github.com/alibaba/druid.同时每次Druid发布正式版本和快照的时候,都会把源码打包,你可以从

  • SpringBoot集成Druid配置(yaml版本配置文件)详解

    maven 配置 <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.3</version> </dependency> <dependency&g

  • springboot+thymeleaf+druid+mybatis 多模块实现用户登录功能

    项目代码:https://github.com/bruceq/supermarket 项目结构: 依赖关系: common:公共层,无依赖 dao:数据层,依赖common service:服务层,依赖dao.common web:应用层,依赖dao.common.service 注:启动类在web层中 父依赖pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:/

  • springboot 动态数据源的实现方法(Mybatis+Druid)

    Spring多数据源实现的方式大概有2中,一种是新建多个MapperScan扫描不同包,另外一种则是通过继承AbstractRoutingDataSource实现动态路由.今天作者主要基于后者做的实现,且方式1的实现比较简单这里不做过多探讨. 实现方式 方式1的实现(核心代码): @Configuration @MapperScan(basePackages = "com.goofly.test1", sqlSessionTemplateRef = "test1SqlSess

  • springboot2.0使用Hikari连接池的方法(替换druid)

    1.springboot 2.0 默认连接池就是Hikari了,所以引用parents后不用专门加依赖 2.贴我自己的配置(时间单位都是毫秒) # jdbc_config datasource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/datebook?useUnicode=true&characterEncoding=UT

  • SpringBoot开发案例之配置Druid数据库连接池的示例

    前言 好久没有更新Spring Boot系列文章,你说忙么?也可能是,前段时间的关注点也许在其他方面了,最近项目中需要开发小程序,正好采用Spring Boot实现一个后端服务,后面会把相关的代码案例分享出来,不至于大家做小程序后端服务的时候一头雾水. 在Spring Boot下默认提供了若干种可用的连接池(dbcp,dbcp2, tomcat, hikari),当然并不支持Druid,Druid来自于阿里系的一个开源连接池,它提供了非常优秀的监控功能,下面跟大家分享一下如何与Spring Bo

  • SpringBoot在yml配置文件中配置druid的操作

    最新版的druid和旧版在filter配置方面有些不同,以下是旧版druid中配置filter: spring: ##数据库连接信息 datasource: url: jdbc:mysql://localhost:3306/young username: root password: root driver-class-name: com.mysql.jdbc.Driver ###################以下为druid增加的配置########################### t

随机推荐