当我在 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
这是列出限制的非正式尝试(似乎是由多个用户通过反复试验做出的):对未签名 Java 小程序可以做什么的限制?
此页面 [ 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)