tomcat 数据库连接池密码加密
应用部署到 tomcat 上后,数据库连接信息通常配置在 context.xml,默认配置都是明文形式,如数据库用户名、密码等,这样可能会导致配置信息被其他人窃取,造成安全隐患,下面介绍下通过对配置信息加解密来保证数据库的安全性。
Tomcat 默认使用的是 DBCP 数据库连接池,所以可以通过更改 DBCP 来实现配置信息的加解密,不同 tomcat 版本具体实现方式不太一样,这里介绍 tomcat7 及以上版本的设置方法。
DBCP 数据库连接池默认控制类是 Tomcat/lib/tomcat-dbcp.jar 中的 org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory.class, 可以通过反编译工具反编译下,或者去 apache 官网下载对应版本 tomcat 的源码,更改该类编译后替换到相应 jar 中即可,但是一经替换,该 tomcat 下所有连接池都会走同样的配置,在实际应用中不太灵活,实际上,在数据库连接配置时可以指定相应的 DBCP 类,如:
<Resource name=“orcl” auth="Container"type=“javax.sql.DataSource”
username=“runqian"password=”\u0072\u0075\u006e\u0071\u0069\u0061\u006e"
driverClassName=“oracle.jdbc.driver.OracleDriver”
url=“jdbcracle:thinlocalhost:1521rcl”
maxActive=“100”
maxIdle=“30”
maxWait=“100”
factory=“org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory1”
/>
在该连接池中,factory 可以指定 DBCP 处理类,到时候数据库连接时会通过该类进行处理。
本例中 password 用 unicode 进行了编码处理,这样只需要在 org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory1 中进行解码即可,找到:
value =properties.getProperty(“password”);
if(value != null)
dataSource.setPassword(decodeUnicode(value));
在这里用 decodeUnicode 对获取到的密码进行解码即可,decodeUnicode 类源码:
public static String decodeUnicode(Stringstr) {
Charset set =Charset.forName(“UTF-16”);
Pattern p =Pattern.compile(“\\\u([0-9a-fA-F]{4})”);
Matcher m = p.matcher(str);
int start = 0 ;
int start2 = 0 ;
StringBuffer sb = new StringBuffer();
while(m.find( start) ) {
start2 = m.start() ;
if(start2 > start){
String seg = str.substring(start, start2) ;
sb.append(seg);
}
String code = m.group(1);
int i = Integer.valueOf(code , 16);
byte[] bb = new byte[ 4] ;
bb[0] = (byte) ((i >> 8) & 0xFF);
bb[1] = (byte) (i & 0xFF) ;
ByteBuffer b = ByteBuffer.wrap(bb);
sb.append(String.valueOf( set.decode(b)).trim() );
start = m.end() ;
}
start2 = str.length() ;
if(start2 > start){
String seg = str.substring(start, start2) ;
sb.append(seg);
}
return sb.toString() ;
}
这样就可以实现对密码的加解密操作,本例中实现了对密码的 unicode 编码,实际中可以通过其他加密方式加密,只需要在 DBCP 处理类中用相应的方式解密即可。
更多集成部署类问题请看:集成部署分类导航
* 数据库密码中含有特殊字符润乾应用部署时 xml 怎么处理
* 轻松实现报表集成
* linux 操作系统安装润乾报表
* 润乾报表权限管理机制
* tomcat8 部署润乾 v2018 完整过程