tomcat配置文件context加密

近日客户要求对tomcat配置文件context的数据库用户名和密码加密。

解密程序已写好,只需在取得用户名密码的时候调用解密程序即可。

context配置如下:
<Context path="/web" docBase="E:\izumi_workspace\izumi\WebContent"  reloadable="false">
  <Resource
   name="jdbc/izumidb1"
   type="javax.sql.DataSource"
   factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
    password="67461e40361806c4"
    driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
    maxIdle="10"
    maxWait="5000"
    username="67461e40361806c4"
    removeAbandoned="true"
    removeAbandonedTimeout="60"
   validationQuery="select count(*) from izumi_user" 
    logAbandoned="true"
    url="jdbc:microsoft:sqlserver://XX.XXX.XX.XXX:1433;DataBaseName=test2"
    maxActive="30"/>

  </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。

大功告成。 

原文地址:https://www.cnblogs.com/mabaishui/p/2106469.html