【发布时间】:2012-11-23 12:10:56
【问题描述】:
当我在 Web 浏览器中运行未签名的 Java 小程序时,它可以做一些事情而不是其他事情。 必须有一个文件来定义这个。我认为它可能看起来像这里的列表 [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
这是列出限制的非正式尝试(似乎是多个用户通过反复试验做出的):Restrictions on what an unsigned Java applet can do?
此页面 [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";
以及各种PropertyPermissions如
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)
【问题讨论】: