0

私には3つのクラスがあります。1つはCapture、AppletLogging、AbstractJLabelと呼ばれます。%USERPROFILE%/。java.policyファイルに次の権限を設定しました。

grant codeBase "file:/C:/project/abc/target/test-classes/-" {
  permission java.util.logging.LoggingPermission "control";
};

すべてのクラスは、上記の助成金のコードベースに含まれています。CaptureがAppletLoggingの静的メソッドを呼び出すと、すべてが正常に機能します。AbstractJLabelがAppletLoggingで同じ静的メソッドを呼び出すと、次のようになります。

java.security.AccessControlException: access denied (java.util.logging.LoggingPermission control)

これは、Sun javaプラグインバージョン6アップデート35で実行されます。誰か説明がありますか?付与codeBaseブロックに次のすべてを実行しても、同じエラーが発生します。

  permission java.security.AllPermission;

CaptureとAbstractJLabelは、静的ブロックから静的メソッドを呼び出すことに注意してください。

4

1 に答える 1

1

私が直面していた問題は、AccessControlExceptionを取得するたびに、実行されていたスレッドがJavascriptから呼び出されたことが原因であることが判明しました。説明させてください。アプレットがホストされているページに、アプレットタグへの参照があります。アプレットタグを参照するJavascript変数からJavaアプレットクラスのパブリックインスタンスメソッドを呼び出すことができます。その場合、スレッドは、アプレット(またはメインのアプレットクラスを含むjar)からコードを実行していても、外部からの呼び出しであるため、アプレットコードベースからのアクセス許可を継承しません。解決策は、AccessController.doPrivileged内の権限を必要とするJavaコードを呼び出すことです。

于 2013-01-02T18:01:33.613 に答える