2

私は現在、次のような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ファイルでユーザー名/パスワードをクリアテキストにすることを許可しないようにする必要があります。

オンラインで少し読んで、Java用のTomcatデータベースパスワードを保護する方法を 見つけ ました。TomcatServer.xmlや他の多くのページでJNDIのユーザー名とパスワードを暗号化します。しかし、私は少し立ち往生しています。

私は最初にextendindBasicDataSourceFactoryを調べましたが、c3p0 CombinedPooledDataSourceを使用しているため、発生しないようです。次に、PooledDataSource、Serializable、およびReferenceableを実装してc3p0データソースラッパーを作成することを検討しましたが、それも機能しませんでした。

auth = "Container" => auth = "Application"を作成することで、認証をサーバー側に移動できることを読みました。ただし、Hibernateを使用して残りの部分を実装する方法がわかりません。

どんな助けでも素晴らしいでしょう。

4

1 に答える 1

0

したがって、これは高度なセキュリティ ソリューションにはなりません。

しかし、これを回避する簡単な方法は、c3p0 の「パスワード」プロパティが構成可能な c3p0 プロパティであり、さまざまな方法で設定できるという事実を利用することです。したがって、c3p0.properties ファイルおよび/または c3p0-config.xml ファイルを作成し、そこにパスワードを設定できます。または、JVM の実行時にシステム プロパティ c3p0.password が設定されていることを確認することもできます。

パスワードが異なる複数の DataSource がある場合は、c3p0 の名前付き構成機能 (c3p0-config.xml ファイル) を使用する必要があります。

c3p0 構成 (c3p0.properties と c3p0-config.xml の両方) ファイルは、アプリケーションの有効な CLASSPATH 内の jar ファイルの最上位にスタックする可能性があります。(Tomcat では、Web アプリ固有の ClassLoader と、より広く共有されている場所との区別に注意する必要があります。) したがって、プレーン テキスト ファイルではなく、圧縮された jar ファイルにパスワードを埋め込むことができます。明らかに、これは安全ではありません。平文は「解凍」するだけです。ただし、パスワードがさりげなくgrepp可能になることなどを防ぐことができます。

http://www.mchange.com/projects/c3p0/#configuration_filesを参照してください。

幸運を!

于 2013-02-13T22:06:48.587 に答える