3

私が取り組んでいる Web アプリケーションは、ログに log4net を使用しています。プロジェクトの要件は、接続文字列を暗号化する必要があることです。復号化された値を使用するように log4net に指示するにはどうすればよいですか?

例えば:

 <log4net>
    <root>
      <level value="Debug"/>
      <appender-ref ref="AdoNetAppender"/>
    </root>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1"/>
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      <connectionString value="encryptedconnectionstringhere=="/>

これを達成する方法はありますか?

4

2 に答える 2

7

Drumboog の回答を実装するときに、無限に再帰的なメソッド呼び出しが原因で、stackoverflow 例外が発生しました。これは基本的に私が最終的に使用したものです。

public class CustomAdoNetAppender : AdoNetAppender
{
    private string _connectionString;
    protected override string ResolveConnectionString(out string connectionStringContext)
    {
        if(string.IsNullOrEmpty(_connectionString))
        {
            var decrypt = new MyDecyptionLib();
            _connectionString = decrypt.MyDecryptionFunction(ConfigurationManager.AppSettings["Connection"]);
        }

        connectionStringContext = _connectionString;
        return connectionStringContext;
    }

}

...そしてlog4net構成セクションで

<appender name="AdoNetAppender" type="My.Name.Space.To.CustomAdoNetAppender">
于 2012-07-26T15:29:29.213 に答える
4

カスタム アペンダーを作成する以外に、構成セクション全体を暗号化できます。

http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx

.NET で構成ファイルをプログラムで暗号化する

編集:

log4net はオープン ソースであるため、コードを調べて、ニーズに合わせてアペンダーをカスタマイズすることもできます。おそらく次のようになります。

public class DecryptConnectionStringAdoNetAppender : AdoNetAppender
{
    protected override string ResolveConnectionString(out string connectionStringContext)
    {
        string result = base.ResolveConnectionString(out connectionStringContext);
        if (String.IsNullOrEmpty(result))
        {
            return result;
        }
        else
        {
            Decrypt(result);
        }
    }

    private string Decrypt(string encryptedValue)
    {
        // Your code goes here.
    }
}

appender次に、構成ファイル内の要素の type 属性を更新します。

<appender name="AdoNetAppender" type="Your.Namespace.DecryptConnectionStringAdoNetAppender">
于 2012-07-25T22:04:37.563 に答える