署名されていない Java アプレットを Web ブラウザで実行すると、できることとできないことがあります。これを定義するファイルがどこかにあるはずです。おそらくここのリスト [ http://www.coderanch.com/t/460650/Websphere/java-security-AccessControlException-Access-denied ] のようになり、次のようなエントリが含まれると思います。
permission java.lang.RuntimePermission "getClassLoader";
permission java.lang.RuntimePermission "setFactory";
permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
permission java.lang.RuntimePermission "accessClassInPackage.sun.beans.infos";
permission java.lang.RuntimePermission "accessDeclaredMembers";
permission java.net.SocketPermission "*", "accept, resolve, connect";
permission java.util.PropertyPermission "*", "read, write";
permission java.security.SecurityPermission "printIdentity";
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
permission java.lang.RuntimePermission "modifyThread";
permission java.lang.RuntimePermission "modifyThreadGroup";
permission java.security.SecurityPermission "getProperty.ssl.SocketFactory.provider";
permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.RuntimePermission "getProtectionDomain";
含まれている可能性のあるその他のエントリのリストを次に示します: http://download.java.net/jdk8/docs/technotes/guides/security/permissions.html
以下は、制限事項を非公式にリストしたものです (複数のユーザーが試行錯誤して作成したようです):
このページ [ http://docs.oracle.com/javase/1.3/docs/guide/security/PolicyFiles.html ] は、関連するファイルが${java.home}\lib\security\java.policy
と${user.home}\.java.policy
. 後者のファイルはなく、前者のみのデフォルトのインストールがあります。そのファイルには
permission java.lang.RuntimePermission "stopThread";
PropertyPermission
などのさまざまな
permission java.util.PropertyPermission "java.version", "read";
これが、署名されていないアプレット用の追加のデフォルト ポリシー ファイルが必要であることを知る方法です。新しいスレッドを開始するアプレットを作成しました。java.policy
上記のデフォルト ファイルでは、次のエラーで失敗します。java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
それは"modifyThreadGroup"
許可です。ただし、ブラウザで実行すると、スレッドが正常に作成されます。
問題は、ブラウザでアプレットを実行するとき、このアクセス許可を含むポリシー ファイルはどこにあるの"modifyThreadGroup"
かということです。JRE ディレクトリで検索しましたが、ないようです。多分それはファイルを通して行われません。では、何がアプレットに"modifyThreadGroup"
パーミッション (およびその他) を付与するのでしょうか?
編集
私が見る例外のスタックトレースは次のとおりです。
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
at java.security.AccessController.checkPermission(AccessController.java:555)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at sun.applet.AppletSecurity.checkAccess(AppletSecurity.java:252)
at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315)
at java.lang.Thread.init(Thread.java:376)
at java.lang.Thread.<init>(Thread.java:446)
at LITSApplet.init(LITSApplet.java:30)
at sun.applet.AppletPanel.run(AppletPanel.java:434)
at java.lang.Thread.run(Thread.java:722)