背景

数据库连接配置文件一般都是使用明文,这会带来数据库泄露的安全问题。例如jdbc.properties配置文件中,数据库连接地址、用户名、密码都是明文,如何使配置文件中的数据库连接信息避免明文显示是本文重点内容,即如何使配置信息使用密文就可以达到跟明文一样的效果。

分析

假如数据库连接密码使用了密文。

修改连接池源码

顾名思义,修改dbcp、c3p0、Druid连接池的源码,先对加密的密码解密,然后再创建连接。改完源码后重新打包发布。不建议采用修改源码的方式。

拦截数据库连接属性信息

不修改源码,又想使用密文密码连接,有没有这么好的事呢?答案是有的。利用spring的加载顺序,在加载dbcp、c3p0、Druid连接池之前拦截数据库连接对象,对密码密文解密后,注入到数据库连接对象的password属性中,这样在创建连接池的时候,用的密码就是明文密码了。

相关技术

数据库连接池:Druid、dbcp、c3p0等

JDBC

AES加解密算法

Spring

实操

假如数据库连接密码使用了密文。

针对拦截数据库对象属性信息这一实现方法做实际操作与测试。

Druid

Jdbc.properties

上图中的连接密码已进行了AES加密。

spring.xml

上图表示将id="dbPwdProperties"的bean的属性赋给Druid数据源连接对象bean。

org.jeecgframework.core.util.DbPwdEncryptBean这一实体bean用来解密密文,解密后的密文重新赋给”password”这一属性。如下图:

AES加解密算法本文不在赘述。

经实操测试后,项目可正常启用。暂未发现不靠谱现象。

C3P0

与druid实操基本相同,只是部分差异,如下:

上图中除了class需要改成”com.mchange.v2.c3p0.ComboPooledDataSource”c3p0连接池对象外(改成c3p0连接池配置),上图红框中也应改成properties,因为c3p0连接池底层源码设置属性的的属性名使用的”properties”,如下图:

而Druid连接池底层源码设置属性的的属性名使用的”connectProperties”,如下图:

DBCP

除了class改成”org.apache.commons.dbcp.BasicDataSource”dbcp连接池对象外(改成DBCP连接池配置),其它同Druid。

java使用密文链接数据库_Java基础——数据库连接信息使用密文相关推荐

  1. java获取达梦数据库_Java连接达梦数据库驱动dm_jdbc

    [实例简介] Java连接达梦数据库驱动dm_jdbc: dm_jdbc\com.dameng.floader.jar dm_jdbc\com.dameng.impexp.jar dm_jdbc\Dm ...

  2. java实现 mysql导入数据库_Java实现MySQL数据库导入

    距离上班另一段时间.如今总结一下怎样使用Java语言实现MySQL数据库导入: 首先新建名为test的数据库: 其次运行以下Java代码: import java.io.File; import ja ...

  3. 用java创建一个学生数据库_java项目源码-数据库创建学生信息管理系统

    java项目源码-数据库创建学生信息管理系统 create data base JavaTest go use JavaTest go create table 登陆 (用户名 char(20) pr ...

  4. java实现链接数据库_Java 链接数据库

    Java 连接 MySQL 需要驱动包 jdbc驱动包下载:https://pan.baidu.com/s/1VpjyXqPMABZxZx_yIsvUbA         密码: 1v9b [第一步] ...

  5. java jdbc连接db2数据库_Java连接db2数据库(常用数据库连接五)

    1.安装好db2数据库,并建立表如下: 2.eclipse或myeclipse中建立工程并导入java连接db2所需要的jar包db2java.jar 下载地址:http://download.csd ...

  6. java制作图形界面数据库_java图形界面以及链接数据库

    import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class No ...

  7. Java设计模式应用到数据库_Java设计模式在数据库编程中的应用研究

    Java的广泛使用使得数据编程变得更加简单方便.本当中.当在加载父类的时候,再调用不同的子类,以避免代码文对Java进行了深入的探讨,提供了一种可行的应用Java的重复编写.templatemetho ...

  8. java不死神兔总数_Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)...

    1.这个问题是如下的: 有一对兔子,从出生后第3个月起,每个月都生一对兔子,小兔子长到第3个月又生一对兔子,加入兔子都不死,问第20个月兔子的对数? 分析:我们找规律 兔子对数 第1个月:   1 第 ...

  9. java保存时间到数据库_java new date 保存到数据库时间不对

    Ibatis框架之系统架构 如果用最简洁的话来总结 iBATIS 主要完成那些功能时,我想下面几个代码足够概括. 1 Class.forName("oracle.jdbc.driver.Or ...

  10. Java 项目JDBC 链接数据库中会出现的错误

    1.出现的地方 1 package com.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 impor ...

最新文章

  1. cmake java_JNI系列之AS支持CMake了
  2. amazon mws api 获取所有产品_Amazon’s Choice是什么?Amazon's Choice标签全解读
  3. java中四种线程池及poolSize、corePoolSize、maximumPoolSize
  4. 15大统计数据描绘网络安全行业市场蓝图
  5. 4.2 js没有块级作用域
  6. 大数据可视化dataease(有所帮助)
  7. CCF201712-3 Crontab(100分)【模拟+文本处理】
  8. 24.两两交换链表中的节点
  9. ylbtech-LanguageSamples-Indexers(索引器)
  10. 「leetcode」617. 合并二叉树:【三种递归】【一种迭代】详解
  11. matlab 矩阵线性规划,matlab线性规划-线性规划,matlab
  12. 一些有趣、奇葩、实用的网站
  13. 性能与实用兼具 Parallels Desktop 13 for Mac全球首发
  14. STM32入门100步
  15. Payment支付平台API接口文档
  16. mysql 5.7.20免安装_Windows下MySQL 5.7.20 免安装版配置
  17. 实现网站在线客服系统代码过程中解决问题-js实现点击复制文本
  18. 正则表达式的例题分析
  19. oracle加字段卡住,oracle添加字段引起的问题
  20. 王者荣耀s16服务器维护,王者荣耀:S16单排环境依旧差劲 五大原因戳到很多人的痛点...

热门文章

  1. Keras的两种模型:序列模型(Sequential)和通用模型(Model)
  2. R语言 面板数据分析 plm包实现(二)——随机效应模型
  3. 我想吃掉你的胰脏--影片--观后感
  4. python3 +ip2region 离线IP库地址文件实现毫秒级查询ip地址信息
  5. 免费的HTTP代理IP服务器地址
  6. 花巨款跟巴菲特吃饭的人,是亏是赚?
  7. ios 判断打开相机权限_ios 判断是否有权限访问相机,相册,定位
  8. win10如何显示和隐藏文件夹
  9. 【STM32F407的DSP教程】第17章 DSP功能函数-定点数互转
  10. C/C++实现的游戏角色名称名字随机生成代码