druid数据库密码加密方法

2022-06-17 09:06:41

druid 配置数据库密码加密

一、springboot 使用密码加密

1.1 引入maven依赖

<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency>

1.2 获取加密密码
打开引入依赖的所在位置
在这里插入图片描述
1.3 在当前目录打开dos窗口
在这里插入图片描述
1.4 使用命令生成加密密码&密钥(两种命令二选一,推荐命令2方便后面复制使用)
命令1:java -cp druid-1.1.10.jar com.alibaba.druid.filter.config.ConfigTools 密码
直接把密钥打印在dos窗口
命令2:java -cp druid-1.1.10.jar com.alibaba.druid.filter.config.ConfigTools 密码 > pwd.txt
生成一个文件在当前目录下
在这里插入图片描述
1.6生成的文件
在这里插入图片描述

1.5 配置文件数据库连接
springboot有两种常用的配置文件,使用哪一种都OK
配置文件 public-key 对应 publicKey
配置文件password 对应 password
applicateion.properties

spring.datasource.url=jdbc:mysql://localhost:3306/db_jpa?serverTimezone=UTC
spring.datasource.username=root
# 生成的加密后的密码
spring.datasource.password=MjJJ2fhGNs6cZtnpFrkEeSvmRjQIQE50MQXNRViz9RE60Ga/YzQjXrEiO65CDx1wbRPAtYDj29O3tWwu9+8aDw==
# 生成的公钥public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKiUxZbptPIvD3c5fxkuqUP/M9HrzWJtaYgbiH2vBHI4Td4DJNd3zJbCY0kxbUiSGGR2V0lwJ7a0ZVaqHPiHPNcCAwEAAQ==
# 配置 connection-properties,启用加密,配置公钥。
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key}
# 启用ConfigFilter
spring.datasource.druid.filter.config.enabled=true

注意:spring.datasource.druid.filter.config.enabled=true 不配置就会出错
application.yaml

spring:
  datasource:
    type:com.alibaba.druid.pool.DruidDataSource
    driver-class-name:com.mysql.cj.jdbc.Driver
    druid:
      url: jdbc:mysql://127.0.0.1:3306/db_jpa?serverTimezone=UTC
      username: root
      password:MjJJ2fhGNs6cZtnpFrkEeSvmRjQIQE50MQXNRViz9RE60Ga/YzQjXrEiO65CDx1wbRPAtYDj29O3tWwu9+8aDw==
      connection-properties: config.decrypt=true;config.decrypt.key=${public-key}
      filter:
        config:
          enabled:truepublic-Key:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKiUxZbptPIvD3c5fxkuqUP/M9HrzWJtaYgbiH2vBHI4Td4DJNd3zJbCY0kxbUiSGGR2V0lwJ7a0ZVaqHPiHPNcCAwEAAQ==


#  连接 mysql 数据库配置
#  datasource:
#    url: jdbc:mysql://127.0.0.1:3306/db_jpa
#    username: root
#    password:Pass1234
#    driver-class-name:com.mysql.cj.jdbc.Driver
#    type:com.alibaba.druid.pool.DruidDataSource


# 驱动配置信息
#  spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#  spring.datasource.url= jdbc:mysql://127.0.0.1:3306/myspringboot
#  spring.datasource.username= your account
#  spring.datasource.password= your encryt password
#  spring.datasource.driverClassName=com.mysql.jdbc.Driver # 连接池的配置信息 # 初始化大小,最小,最大
#  spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=20 # 配置获取连接等待超时的时间
#  spring.datasource.maxWait=60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
#  spring.datasource.timeBetweenEvictionRunsMillis=60000 # 配置一个连接在池中最小生存的时间,单位是毫秒
#  spring.datasource.minEvictableIdleTimeMillis=300000
#  spring.datasource.validationQuery=SELECT1 FROM DUAL
#  spring.datasource.testWhileIdle=true
#  spring.datasource.testOnBorrow=false
#  spring.datasource.testOnReturn=false # 打开PSCache,并且指定每个连接上PSCache的大小
#  spring.datasource.poolPreparedStatements=true
#  spring.datasource.maxPoolPreparedStatementPerConnectionSize=20 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
#  spring.datasource.filters=config,stat,wall,log4j # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
#  spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrpt=true;config.decrypt.key=yourpublic key

注意:
filter:
config:
enabled: true
不开起会报错

二、MVC 使用密码加密(非maven项目,maven项目获取加密密码依照springboot的方式)
2.1 下载 druid.jar下载地址
在这里插入图片描述
2.2 找到下载好的目录打开dos窗口
在这里插入图片描述

2.3 使用命令生成加密密码&密钥(两种命令二选一,推荐命令2方便后面复制使用)
命令1:java -cp druid-1.1.10.jar com.alibaba.druid.filter.config.ConfigTools 密码
直接把密钥打印在dos窗口
在这里插入图片描述

命令2:java -cp druid-1.1.10.jar com.alibaba.druid.filter.config.ConfigTools 密码 > pwd.txt
生成一个文件在当前目录下
在这里插入图片描述

2.4编写xml文件

<bean id="dataSource"class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property><property name="url" value="jdbc:oracle:thin:@**.***.**.***:1521/****"></property><property name="username" value="****"></property><property name="password"
					  value="JXnxfjL78rQP3txJL295FucpV4aslSehNT9yhJypHemLcNu/yrRfzZTnKiP+4BjKqPtUzw5tW8iWBNGDeUEYsQ=="></property><property name="filters" value="config"/><property name="connectionProperties"
					  value="config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKI6dkcdjT8wFLh6fk4D/Vp6Pub5oxhv34zQtgVGaM/KXD3dLkXtP/F0y2pDsLKDa7gocsuxzOrOIUuyVaovkBECAwEAAQ=="/></bean>

密钥配置在name=“connectionProperties” value="config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKI6dkcdjT8wFLh6fk4D/Vp6Pub5oxhv34zQtgVGaM/KXD3dLkXtP/F0y2pDsLKDa7gocsuxzOrOIUuyVaovkBECAwEAAQ=="
**config.decrypt=true;config.decrypt.key=**一定要写,要不绝壁报错,被坑过

上面这些都是直接配置在项目代码里的,这样的加密配置起始作用并不高,别人还是可以看到加密后的密码&密钥,安全程度并不高,大多上线后的项目密码都是配置在服务器上的,比如使用tomcat的数据源配置,使用jndi去连接就ok了。

三、使用jndi连接tomcat加密数据源
tomcat一般在linux服务器上部署,在tomcat的config目录下的context.xml文件中配置数据源
3.1 下载druid.jar
下载地址
在这里插入图片描述
3.2 把druid.jar包放入tomcat中的lib目录下一份
在这里插入图片描述

3.2 生成密钥
命令1:java -cp druid-1.1.10.jar com.alibaba.druid.filter.config.ConfigTools 密码
在这里插入图片描述

命令2:java -cp druid-1.1.10.jar com.alibaba.druid.filter.config.ConfigTools 密码 > pwd.txt
生成一个文件在当前目录下
在这里插入图片描述

3.3 编写context.xml文件
tomcat/config/context.xml

<?xml version="1.0" encoding="UTF-8"?><Context><Resource name="jdbc/oracledb"
      factory="com.alibaba.druid.pool.DruidDataSourceFactory"
      auth="Container"
      type="javax.sql.DataSource"
      url="jdbc:oracle:thin:@**.***.***.***:1521/****"
      driverClassName="oracle.jdbc.driver.OracleDriver"
      username="***"
      password="JXnxfjL78rQP3txJL295FucpV4aslSehNT9yhJypHemLcNu/yrRfzZTnKiP+4BjKqPtUzw5tW8iWBNGDeUEYsQ=="
      initialSize="30"
      maxActive="200"
      minIdle="30"
      maxWait="-1"
      testOnBorrow="true"
      validationQuery="select 1 from dual"
      connectionProperties="config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKI6dkcdjT8wFLh6fk4D/Vp6Pub5oxhv34zQtgVGaM/KXD3dLkXtP/F0y2pDsLKDa7gocsuxzOrOIUuyVaovkBECAwEAAQ==" 
	  filters="config,stat,wall"/></Context>

connectionProperties = “config.decrypt=true;config.decrypt.key={生成的公钥}”
这个一定要写完整,不然坑死你,咋启动都失败
3.4项目引用
web.xml

<!-- 连接数据库配置--><resource-ref><description>Datasource</description><res-ref-name>jdbc/oracledb</res-ref-name><!--context中设置的连接池的名字--><res-type>javax.sql.DataSource</res-type><!--context中导入的类--><res-auth>Container</res-auth><!-- 默认是容器,Tomcat--></resource-ref>

datasources.xml

<bean id="dataSource"class="org.springframework.jndi.JndiObjectFactoryBean"><property name="jndiName"><value>jdbc/oracledb</value></property><property name="resourceRef"><value>true</value></property></bean>

注意 jndiName&res-ref-name 对应的是 tomcat 中context.xml中的name名称,名字不能写错了,写错绝壁失败
使用jndi连接数据库如果不想使用加密的密码,在配置context.xml的时候就不用写connectionProperties这个配置,password换成没有被加密的密码就可以了
springboot使用的是mysql数据库,mvc使用的是oracle数据库

  • 作者:韩大好人
  • 原文链接:https://blog.csdn.net/weixin_44784871/article/details/119238922
    更新时间:2022-06-17 09:06:41