加密c3p0 ComboPooledDataSource的密码

时间:2013-02-13 20:11:23

标签: apache hibernate java-ee tomcat c3p0

我目前有一个server.xml配置,其中包含以下内容

<Resource auth="Container"
    description="DB Connection"
    driverClass="oracle.jdbc.driver.OracleDriver"
    maxPoolSize="40"
    minPoolSize="2"
    aquireIncrement="1"
    name="jdbc/FOOBAR"
    user="foo"
    password="bar"
    factory="org.apache.naming.factory.BeanFactory"
    type="com.mchange.v2.c3p0.ComboPooledDataSource"
    jdbcUrl="path:to:db:port:db" />

出于显而易见的原因,我要求不再允许用户名/密码在server.xml文件中以明文形式显示。

我在线阅读了一下,遇到了How to Secure Tomcat Database Passwords for Java Encrypt username and password for JNDI in Tomcat Server.xml和其他许多页面;但是,我有点卡住了。

我首先查看了extendind的BasicDataSourceFactory - 但由于我使用了c3p0 CombinedPooledDataSource,似乎无法发生。然后,我试着通过实现PooledDataSource,Serializable和Referenceable来创建一个c3p0数据源包装器,但这也不起作用。

我读过我可以通过使auth =“Container”=&gt;将身份验证移到服务器端。 AUTH = “应用程序”。但是,我不确定如何使用Hibernate实现其余的部分。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

因此,这不是一个高安全性的解决方案。

但是,解决这个问题的一个简单方法是利用c3p0的“密码”属性只是一个可配置的c3p0属性,可以通过多种方式进行设置。因此,您可以创建c3p0.properties文件和/或c3p0-config.xml文件,并在那里设置密码。或者,您可以确保在运行JVM时设置了System属性c3p0.password。

如果您有多个具有不同密码的DataSource,则需要使用c3p0的命名配置功能,这意味着c3p0-config.xml文件。

c3p0 config(c3p0.properties和c3p0-config.xml)文件可能会卡在应用程序有效CLASSPATH中jar文件的顶层。 (使用tomcat,您必须注意特定于Web应用程序的ClassLoader与更广泛共享的位置之间的区别。)因此,您可以将密码嵌入压缩的jar文件而不是纯文本文件中。显然,这不安全:明文只是一个“解压缩”。但是这样可以防止密码被随意隐藏等等。

请参阅http://www.mchange.com/projects/c3p0/#configuration_files

祝你好运!