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=UTCspring.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}# 启用ConfigFilterspring.datasource.druid.filter.config.enabled=true
注意:spring.datasource.druid.filter.config.enabled=true 不配置就会出错
application.yaml
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverdruid:url: jdbc:mysql://127.0.0.1:3306/db_jpa?serverTimezone=UTCusername: rootpassword: 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=SELECT 1 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=your public 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数据库