zoukankan      html  css  js  c++  java
  • 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。

    大功告成。 

  • 相关阅读:
    Docker搭建redis集群
    PHP中的OPCode和OPCache
    Redis的三种集群模式
    MySQL事务的隔离级别
    Docker镜像分层技术
    为什么 MongoDB 选择B树,Mysql 选择B+树?
    MongoDB的使用
    cesium+vue挖坑展示
    Ceium+Vue踩坑记录
    渲染总结——记录
  • 原文地址:https://www.cnblogs.com/mabaishui/p/2106469.html
Copyright © 2011-2022 走看看