4

db.propertiesデータベース アクセスの資格情報を含むプロパティ ファイル (例: ) があります。例:

db.jdbc.user=johndoe 
db.jdbc.password=topsecret

このファイルを読み取り、さまざまなタスクを実行する多くの ant スクリプトがあります。例:

<!--Initialize the environment-->
<target name="environment">

<!--Read database connection properties-->
    <property file="$../db.properties"/>
    ...
</target>

<target name="dbping"
    description="Test the database connectivity with the current settings."
    depends="environment">
    ...
    <sql driver="oracle.jdbc.OracleDriver"
         url="${db.jdbc.url}"
         userid="${db.jdbc.user}"
         password="${db.jdbc.password}"
         classpathref="classpath.jdbc"
         print="true"
         showheaders="false">
         SELECT 'JDBC connect: successful!' FROM dual;
    </sql>

    ...
</target>

クライアントは、db.properties 内のパスワードが、.jar ファイル内で提供される暗号化ライブラリを使用して暗号化されることを望んでいます。

db.jdbc.user=johndoe
db.jdbc.password.encrypted=true
db.jdbc.password=018Dal0AdnE=|ySHZl0FsnYOvM+114Q1hNA==

私たちが望んでいるのは、大量の ant ファイルの変更を最小限に抑えて復号化を達成することです。の拡張プロパティ処理について聞いたことがありますAnt 1.8が、私たちは を使用していますAnt 1.7.1

これに対する最善の解決策は何ですか - カスタムタスク、PropertyHelperインスタンスの魔法、何か他のもの?

ヒントをお寄せいただきありがとうございます。

4

2 に答える 2

1

あなたが取りたいアプローチは、ant内で実行できるラッパーアプローチだと思います。

親 ant スクリプト:

<target name="decrypt">    
  <exec executable="myJar">
    <arg value="encryptedString"/>
  </exec>
</target>  
    <target name="build-foo">
        <subant target="build">
          <fileset dir="${test.home}" includes="Foobuild.xml"/>
        </subant>
    </target>

    <target name="build-bar">
        <subant target="build">
          <fileset dir="${test.home}" includes="Barbuild.xml"/>
        </subant>
    </target>

subant
execを使用する (潜在的に危険)

あなたがしたいことは、各サブスクリプトをこの親ビルド ファイルにドロップし、暗号化されていない文字列をパラメーターとして各スクリプトに渡したり、プロパティから読み取ったりすることです。

于 2013-05-28T12:11:36.853 に答える
1

私が好む解決策は、独自のカスタム タスクで問題を処理することです。これには最小限の変更が必要でした。この ant スクリプトでは、このタスクは次のようになります。

<!--Initialize the environment-->
<target name="environment">

    <!--Read database connection properties-->
    <property file="$../db.properties"/>
    ...

    <decryptpwd passwordProperty="db.jdbc.password"/>

</target>

タスクも簡単です。次のようになります。

public class DecryptPassword extends Task
{
    @Override
    public void execute()
    {
        ...
        PropertyHelper.getPropertyHelper(getProject()).setProperty(null, passwordProperty, getDecryptedPassword(),
                            false);
        ...                 
    }
}

そしてええ-うまくいくようです;-)

于 2013-05-30T10:03:26.643 に答える