シナリオ:"java.library.path"のJVMリロードを強制するのは悪い考えですか?
私は.dllファイルを使用する必要がありますアプレットを持っています。 .dllはPATHに存在しなければなりません。 PATH上で.dllを取得するには、アプレットを使用して、ブラウザを実行しているユーザーが管理者権限を持っていなければなりません(通常、右クリックアイコン管理者として実行...)。
問題:
私は行政privelagesを獲得することの必要性を取り除くしたいと思います。
悪い考え方 私はアプレットにユーザーのホームディレクトリのどこかにファイルを保存させたいと思っています。そのパスをPATHに追加したいと思います。それがこれを行うには、JVMを強制的に悪い考え
System.setProperty("java.library.path", <new path>);
try {
// this forces JVM to reload "java.library.path" property
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
} catch (Exception e) {
e.printStackTrace();
init_failure = true;
}
質問
です:Appearently、それを介して行うことができますか?これは文書化されていないメソッドを使用していますか?それは単なるハックですか?
他のビット
これはアプレットですので、私は正しい、-Dオプションを使ってjava.library.pathに指定することはできませんか?
このコードはイントラネットにあります。普通のインターネットタフな男のためのものではありません。
私たちは皆「管理者特権を取得する必要性を取り除く」のが好きではないでしょうか... – maerics
はい、このようにするのは悪い考えです。これは、使用されている 'ClassLoader'の実装の詳細に依存しています。これは、将来のバージョンのJRE、または他のベンダーのJRE実装では機能しない可能性があります。使用されている特定の 'ClassLoader'実装に' sys_paths'という名前のフィールドがあるという保証はありません。 – Jesper
解決策は醜いですが、おそらく最も醜い解決策です。 ;) –