0

これは、 https://forums.oracle.com/thread/2577877の Oracle Java フォーラムに投稿されていることに注意して ください。

グラフを表示する単純なアプレットがあります。このアプレットには 2 つの jar ファイルがあり、メインの jar ファイルは信頼できる CA によって署名されており、もう 1 つの jar ファイルは署名されていません。

署名付きjarファイルのマニフェストに、追加しました

Trusted-Library value="true" 

アプレットが署名されていない jar ファイルからクラスの作成オブジェクトを呼び出そうとするときに Java コンソールから開始すると、署名されていない jar ファイルから指定されたjava.lang.ClassNotFoundExceptionクラスを取得します。

さまざまな Java 7 リリース (Internet Explorer では 40、21、Chrome ではリリース 6) に基づいて、Windows 7 Chrome と Internet Explorer でこれを試しました。

それは動作しません。

2 番目の jar ファイルに署名した場合、問題なく動作します。

Java 構成から mix コードのチェックをバイパスしたくないことに注意してください。

どんなアイデアやヒントでも大歓迎です。

4

1 に答える 1

0

これは投稿によって確認されてい ます https://forums.oracle.com/thread/2280127

Oracle http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/mixed_code.html#trusted_libraryによって確認されています

「Trusted-Libraryマニフェスト属性でマークされるjarファイルのコードは、クラスローダーに依存する呼び出しを使用する場合、わずかに変更する必要がある場合があります[...] Trusted-Libraryのコードは通常のローダーを検索できますThread.currentThread().getContextClassLoader().[...] を呼び出すことにより、一般的に、信頼できるライブラリ内のコードが慎重かつ安全な方法で記述されていること、および別の方法で別のライブラリにロードされることと互換性があることを確認するように注意する必要があります。アプリケーションの一部であり、通常のローダーによってロードされる残りの jar からのクラス ローダー インスタンス。」

「Thread.currentThread().getContextClassLoader().[...]」

信頼できる jar からサンドボックス jar にメソッドを呼び出す簡単なテストを行ったところ、リフレクションを使用してそれを実行したところ、うまくいきました。

信頼できるjarファイルでサンドボックスjarファイルクラスを使用するたびに、リフレクションを使用する必要があるようです(クラスをロードし、必要なメソッドを呼び出します)。これが先か。誰かがこれを確認できますか。

private void useReflection() { 試す {

       // using normal class loader 
     Class<?> clazz = Class.forName("com.abc.bla.bla.SandBox", true, Thread.currentThread().getContextClassLoader());
     Constructor<?> constructor = clazz.getConstructor();
     Object obj = constructor.newInstance(new Object[] {});

     Method method = clazz.getMethod("sayHello", new Class[] {});
     method.invoke(obj, new Object[] {});
  }
  catch (Exception ex)
  {
     ex.printStackTrace();
  }

}

要約すると、サンドボックス jar ファイル (信頼されていない) をロードして通常のクラスローダーの使用を許可し、署名付き (信頼された) jar 用に設計された特別な import ステートメントを介してデフォルトのものを回避するために、リフレクションを使用する必要があるようです。マニフェストの追加属性に従って混合モードにあるファイル。

于 2013-09-11T16:48:38.260 に答える