2008-09-13 7 views
5

署名済みのJavaアプレットを実行している場合、リモートドメイン(同じドメイン内、おそらく同じホスト内)から追加のクラスをロードして実行できますか?署名されたアプレットからJavaクラスをロードする

私は、ページを変更したり、現在のアプレットを停止したりせずにこれをやりたいのですが。もちろん、すべてのクラスの合計サイズが大きすぎるため、すべてを一度にロードすることはできません。

これを行う方法はありますか?そして、署名されたアプレットでこれを行い、 "信頼"ステータスを保持する方法はありますか?

答えて

5

私はクラスがアプレットに遅延読み込みされていると思います。要求に応じてロードされます。

とにかく、クラスがjarの外にある場合は、単にアプレットクラスローダーを使用し、名前でロードするだけです。例:

ClassLoader loader = this.getClass().getClassLoader(); 
Class clazz = loader.loadClass("acme.AppletAddon"); 

あなたは私はあなたがjarファイル(複数可)のURL(複数可)でのURLClassLoaderの新しいインスタンスを作成する必要があります考えてjarファイルからクラスをロードします。

URL[] urls = new URL[]{new URL("http://localhost:8080/addon.jar")}; 
URLClassLoader loader = URLClassLoader.newInstance(urls,this.getClass().getClassLoader()); 
Class clazz = loader.loadClass("acme.AppletAddon"); 

デフォルトでは、アプレットは新しいクラスローダーの作成を禁止されています。しかし、あなたがアプレットに署名し、新しいクラスローダーを作成するための許可を与えたら、それを行うことができます。

+0

ありがとうございます、URLClassLoaderは私が欲しいもののように思えます。サインチェーンをそのままにしておくことができます。 –

+1

親(ローダ)アプレットに署名した後で動作します。しかし、子(ロードされた)ジャーは、署名されていても、セキュリティ権限を取得しません。 –

0

これは可能なように聞こえますが(私はそれをやったことはありません)。 Remote Method Invocation(RMI)を見たことがありますか?

+0

RMIは私が探している方向ではありませんが、とにかく感謝しています。 –

2

はい、アプレットを実行したホストへのURL接続を開くことができます。 HTTP URLを使用してクラスローダーを作成するか、クラス(jarとして)をユーザーのマシンにダウンロードして、クラスパスにそれらのjarを含むクラスローダーを作成することができます。アプレットは停止せず、別のページを読み込む必要はありません。

信頼に関する質問の第2の部分に関しては、ユーザーがアプレットにアクセス権を与えた後は、何かをダウンロードすることができます。ローカルマシンには何かをダウンロードできます。 UI設計で許可されている場合、おそらくユーザーに何をしているかを知らせることができます。

これが役に立ちます。

+0

華麗な、ありがとう。私は両方の答えを受け入れ/マージすることができたらいいと思う。 –

+0

残念ながら、私がjassuncaoの答えにコメントしたとき、ロードされたアプレットは適切な権限を持っていません。 –

関連する問題