dbcp数据源加密

2024-05-13 23:32
文章标签 加密 数据源 dbcp

本文主要是介绍dbcp数据源加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为了数据库的安全,密码是需要加密放在配置文件中的,这样别人就不能轻易的从配置文件中获取到数据库的明文密码,然后登陆我们的数据库,造成数据泄露。

通过分析dbcp的数据源源码,我们发现,主要的密码和用户名是在getConnection的时候用来获取datasource的。

(一)通过修改dabasource源码,使用对称加密解密算法,解密已经加密并且放在配置文件中的数据库密码,然后创建数据库连接。

public class BasicDataSourceimplements DataSource
{pprotected ConnectionFactory createConnectionFactory()
<span style="white-space:pre">		</span>throws SQLException
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>Class driverFromCCL = null;
<span style="white-space:pre">		</span>if (driverClassName != null)
<span style="white-space:pre">			</span>try
<span style="white-space:pre">			</span>{
<span style="white-space:pre">				</span>try
<span style="white-space:pre">				</span>{
<span style="white-space:pre">					</span>if (driverClassLoader == null)
<span style="white-space:pre">						</span>Class.forName(driverClassName);
<span style="white-space:pre">					</span>else
<span style="white-space:pre">						</span>Class.forName(driverClassName, true, driverClassLoader);
<span style="white-space:pre">				</span>}
<span style="white-space:pre">				</span>catch (ClassNotFoundException cnfe)
<span style="white-space:pre">				</span>{
<span style="white-space:pre">					</span>driverFromCCL = Thread.currentThread().getContextClassLoader().loadClass(driverClassName);
<span style="white-space:pre">				</span>}
<span style="white-space:pre">			</span>}
<span style="white-space:pre">			</span>catch (Throwable t)
<span style="white-space:pre">			</span>{
<span style="white-space:pre">				</span>String message = (new StringBuilder()).append("Cannot load JDBC driver class '").append(driverClassName).append("'").toString();
<span style="white-space:pre">				</span>logWriter.println(message);
<span style="white-space:pre">				</span>t.printStackTrace(logWriter);
<span style="white-space:pre">				</span>throw new SQLNestedException(message, t);
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>Driver driver = null;
<span style="white-space:pre">		</span>try
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>if (driverFromCCL == null)
<span style="white-space:pre">			</span>{
<span style="white-space:pre">				</span>driver = DriverManager.getDriver(url);
<span style="white-space:pre">			</span>} else
<span style="white-space:pre">			</span>{
<span style="white-space:pre">				</span>driver = (Driver)driverFromCCL.newInstance();
<span style="white-space:pre">				</span>if (!driver.acceptsURL(url))
<span style="white-space:pre">					</span>throw new SQLException("No suitable driver", "08001");
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>catch (Throwable t)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>String message = (new StringBuilder()).append("Cannot create JDBC driver of class '").append(driverClassName == null ? "" : driverClassName).append("' for connect URL '").append(url).append("'").toString();
<span style="white-space:pre">			</span>logWriter.println(message);
<span style="white-space:pre">			</span>t.printStackTrace(logWriter);
<span style="white-space:pre">			</span>throw new SQLNestedException(message, t);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>if (validationQuery == null)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>setTestOnBorrow(false);
<span style="white-space:pre">			</span>setTestOnReturn(false);
<span style="white-space:pre">			</span>setTestWhileIdle(false);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>String user = username;
<span style="white-space:pre">		</span>if (user != null)
<span style="white-space:pre">			</span>connectionProperties.put("user", user);
<span style="white-space:pre">		</span>else
<span style="white-space:pre">			</span>log("DBCP DataSource configured without a 'username'");
<span style="white-space:pre">		</span>String pwd = reset(password);
<span style="white-space:pre">		</span>if (pwd != null)
<span style="white-space:pre">			</span>connectionProperties.put("password", pwd);
<span style="white-space:pre">		</span>else
<span style="white-space:pre">			</span>log("DBCP DataSource configured without a 'password'");
<span style="white-space:pre">		</span>ConnectionFactory driverConnectionFactory = new DriverConnectionFactory(driver, url, connectionProperties);
<span style="white-space:pre">		</span>return driverConnectionFactory;
<span style="white-space:pre">	</span>}<span style="font-size:14px;color:#ff0000;">private String reset(String secret)throws SQLNestedException{</span><span style="font-size:14px;color:#666666;">byte decode[];byte kbytes[] = "xxxx".getBytes();SecretKeySpec key = new SecretKeySpec(kbytes, "Blowfish");BigInteger n = new BigInteger(secret, 16);byte encoding[] = n.toByteArray();</span><span style="font-size:14px;color:#ff0000;">Cipher cipher = Cipher.getInstance("Blowfish");</span><span style="font-size:14px;color:#666666;">cipher.init(2, key);decode = cipher.doFinal(encoding);return new String(decode);Exception e;e;throw new SQLNestedException((new StringBuilder()).append("Cannot decode password: ").append(e.getMessage()).toString(), e);</span><span style="font-size:14px;color:#ff0000;">}</span>static {DriverManager.getDrivers();}
}

重新打包发布一个dbcp的jar包,然后项目中使用这个jar包即可。


springContext.xml的配置:

    <!--组织架构数据源--><bean id="bomsDataSource" class="<span style="color:#ff0000;">org.apache.commons.dbcp.BasicDataSource</span>" destroy-method="close"><property name="url" value="${${env}.boms.jdbc.url}"/><property name="driverClassName" value="${${env}.boms.jdbc.driver}"/><property name="username" value="${${env}.boms.jdbc.username}"/><property name="password" value="${${env}.boms.jdbc.password}"/><property name="initialSize" value="5"/><property name="maxActive" value="50"/><property name="maxIdle" value="2"/><property name="minIdle" value="1"/><property name="defaultAutoCommit" value="true"/></bean>

pom.xml文件中,引入我们自己重新发布的包:

  <span style="white-space:pre">	</span>     <dependency><groupId>dbcp</groupId><artifactId>dbcp</artifactId><version>1.4.d2</version></dependency>



这篇关于dbcp数据源加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987116

相关文章

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

SpringBoot3使用Jasypt实现加密配置文件

《SpringBoot3使用Jasypt实现加密配置文件》这篇文章主要为大家详细介绍了SpringBoot3如何使用Jasypt实现加密配置文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... 目录一. 使用步骤1. 添加依赖2.配置加密密码3. 加密敏感信息4. 将加密信息存储到配置文件中5

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

Java实现MD5加密的四种方式

《Java实现MD5加密的四种方式》MD5是一种广泛使用的哈希算法,其输出结果是一个128位的二进制数,通常以32位十六进制数的形式表示,MD5的底层实现涉及多个复杂的步骤和算法,本文给大家介绍了Ja... 目录MD5介绍Java 中实现 MD5 加密方式方法一:使用 MessageDigest方法二:使用

SpringBoot利用dynamic-datasource-spring-boot-starter解决多数据源问题

《SpringBoot利用dynamic-datasource-spring-boot-starter解决多数据源问题》dynamic-datasource-spring-boot-starter是一... 目录概要整体架构构想操作步骤创建数据源切换数据源后续问题小结概要自己闲暇时间想实现一个多租户平台,