问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何实现Tomcat连接池数据库密码加密

发布网友 发布时间:2022-04-29 06:04

我来回答

1个回答

热心网友 时间:2022-05-02 04:15

问题解决思路:
将配置文件用户相关的信息(例如:密码)进行加密使其以密文形式存在,进行初始化连接池的时候进行解密操作,达到成功创建连接池的目的。Tomcat默认使用DBCP连接池(基于common-pool的一种连接池实现),可在http://jakarta.apache.org/commons/dbcp/下载commons-dbcp源码包commons-dbcp-1.4-src.zip,对org.apache.commons.dbcp.BasicDataSourceFactory类修改,把数据库密码字段(加密后的密文)用解密程序解密,获得解密后的明文即可。
具体实现:
1. 修改org.apache.commons.dbcp.BasicDataSourceFactory类文件
找到数据源密码设置部分
value = properties.getProperty(PROP_PASSWORD);
if (value != null) {
dataSource.setPassword(value);
}
修改为:
value = properties.getProperty(PROP_PASSWORD);
if (value != null) {
dataSource.setPassword(Encode.decode(value));
}
将配置文件中的“密码”(加密后的结果)取出,调用加解密类中的解密方法Encode.decode(value)进行解密。
2. 加密类Encode.java,本例中使用加密解密模块比较简单只是用来说明问题,密文为明文的十六进制串。
public class Encode {
//编码-普通字符串转为十六进制字符串
public static String encode(String password){
String result = “”;
byte[] psd = password.getBytes();
for(int i=0;i<psd.length;i++){
result += Integer.toHexString(psd[i]&0xff);
}
return result;
}
//解码–十六进制字符串转为普通字符串
public static String decode(String password){
String result = “”;
password = password.toUpperCase();
int length = password.length() / 2;
char[] hexChars = password.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
result = new String(d);
return result;
}
//字符转字节
public static byte charToByte(char c) {
return (byte) “0123456789ABCDEF”.indexOf(c);
}
}
3. 数据库连接池文件,红色字体为数据源配置中密码设置,此时已经改为密文形式。
<?xml version=’1.0′ encoding=’utf-8′?>
<Context docBase=”reportmis” path=”/reportmis” privileged=”true” workDir=”work\Catalina\localhost\reportmis”>
<Resource auth=”Container” name=”mis2datasource” type=”javax.sql.DataSource”/>
<ResourceParams name=”mis2datasource”>
<parameter>
<name>password</name>
<value>696e65743231</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>username</name>
<value>wanfang</value>
</parameter>
</ResourceParams>
</Context>
4. 将修改后的BasicDataSourceFactory.java和新添加的Encode.java编译后的class类文件重新打包进commons-dbcp-1.4.jar,将该包拷贝进tomcat下的common/lib目录中,重启tomcat。此时tomcat下部署的应用在连接数据源的时候都可以在不暴露密码明文的情况下进行连接。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
白色T 恤如何搭配才能穿出优雅的韵味? 白色T 恤衫怎样搭配才能显得时髦又好看? 白色紧身正肩T 恤想要穿出休闲感,该如何搭配? 手机怎么连接笔记本电脑的wifi上网 电热水器为什么用着用着就没压力了 用什么拖地最干净又耐脏 爱奇艺会员的等级是怎么划分的? 爱奇艺星钻会员怎么开通 怎样才是正确的接吻呢 网页上鼠标点住右键拖动后出的蓝色线条是什么?干什么用的?为什么一松开... 什么药可以补硒 mybatis为什么要使用dbcp 什么样的硒片比较好? 哪位高手能教教我如何配置tomcat的数据池? tomcat-dbcp与commons-dbcp有什么区别? 我右脚小脚趾头外 侧长了个鸡眼,一个月前用激光打了,现在又长出来了,应该怎么办 您好,我请问一下右脚小脚趾头骨折是否能够评上10级伤残呢? 右脚小脚趾弯曲酸胀疼痛 右脚小脚趾头末端粉碎性骨折。2 右脚小脚趾,的趾头,靠外侧的部分,一直有点麻木,一整天都是这样,有好长一段时间了,其他都正常,只有 右脚小脚趾发麻 什么原因 右脚小脚趾一直动是好兆头还是坏兆头 右脚小脚趾头拍了片子说骨折可能性大 我的右脚小脚趾头麻是什么原因 我的右脚俩小脚趾头有点麻木,不知道为何 右脚两个小脚趾头发麻是怎么回事? 右脚小脚趾头发麻是真么回事 微信里私聊的信息就发的出去,但是一进群发就消息延迟的很厉害。 其它群都没问题,就一个群出现这种情况 开发网站是用java还是用php好 中国传统中有“圆文化”的说法吗? 补硒品牌哪个好? Tomcat 配置的数据源,测试连接数据库报告类转换错误。 郢天牌维生素E硒片是真是假- 问一问 dataSource配置dbcp 为什么tomcat启动时会抛出找不到c3p0 org.apache.tomcat.dbcp.dbcp.SQLNestedException: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create Pool... org.apche.tomcat.dbcp.dbcp.SQLNestedException:Cannot create JDBC... ...6 连mysql 出问题了 org.apache.tomcat.dbcp.dbcp.BasicDataSource... qq账号被冻结了人脸识别不了怎么办- 问一问 qq被冻结了填写资料又总是不能通过怎样办 QQ被冻结了。发信息不能验证。 类似于花瓣和堆糖的设计类的图片搜集网站还有哪些 花瓣网是pinterst吗? 求有此类高清图片的网站!!注意是高清!!类似于花瓣插画这样的网站,但花瓣的太不高清了,大部分都是网 请问我以前信用卡有过逾期已经全额还款,今年想在上海通用金融进行车贷,问题大吗? 什么是手机DLNA功能,有什么作用? 大型功能性网站到底使用PHP开发好还是JAVA OPPO A8手机怎么使用DLNA? 茶盘,茶池和茶台三者有什么区别 茶你很懂,可你又对茶台知道多少