近日客户要求对tomcat配置文件context的数据库用户名和密码加密。
解密程序已写好,只需在取得用户名密码的时候调用解密程序即可。
</Context>
为何要修改tomcat代码?
程序中使用这种方式取得Resource中定义的数据库
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
DataSource ds = (DataSource) ctx.lookup("jdbc/izumidb1");
因为javax.sql.DataSource是一个接口,是tomcat实现了这个接口,所以解密过程需要修改tomcat的代码。
修改哪里?
修改org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory的createDataSource()方法即可。
在apache.org找到 BasicDataSourceFactory的源码(最好是你当前使用的tomcat的版本的源码)
自建 org.apache.tomcat.dbcp.dbcp包,把BasicDataSourceFactory源码扔到包里,如果源码有import到其他类,把其他类也扔到包里,做解密修改。
修改完后放哪里?
在tomcat/common/lib中有关于dbcp的包,不同版本的tomcat可能包名不同。找到org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory所在的包,将编译好的我们的BasicDataSourceFactory类的.class文件放到包里,覆盖原来的BasicDataSourceFactory.class。
大功告成。