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

相关文章

java实现多数据源切换方式

《java实现多数据源切换方式》本文介绍实现多数据源切换的四步方法:导入依赖、配置文件、启动类注解、使用@DS标记mapper和服务层,通过注解实现数据源动态切换,适用于实际开发中的多数据源场景... 目录一、导入依赖二、配置文件三、在启动类上配置四、在需要切换数据源的类上、方法上使用@DS注解结论一、导入

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

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. 配置主数据