我是Wordle的作者,它是少数幸存的 Java 小程序之一。
最近,我收到用户报告警告说我的(签名的)applet 很快就会被 JRE 列入黑名单,因为它没有在其清单中明确指定“Permissions”属性。所以,现在 MANIFEST.MF正确指定
Permissions: sandbox
并且<applet>
标签包括神奇的
<param name="permissions" value="sandbox" />
参数,如记录。
现在,安装 OS X JRE 7 的人可以毫不费力地运行 Wordle,但卡在 JRE 6 上的人(像许多学校 IT 管理员一样)根本无法运行小程序。他们得到
java.lang.SecurityException: JAR manifest requested to run in sandbox only:
http://wordle.appspot.com/j/v1390/wordle.jar
at com.sun.deploy.security.DeployManifestChecker.verify(DeployManifestChecker.java:106)
at com.sun.deploy.security.DeployManifestChecker.verify(DeployManifestChecker.java:84)
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(TrustDecider.java:319)
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(TrustDecider.java:280)
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(TrustDecider.java:270)
at sun.plugin2.applet.Plugin2Manager.isAppletSigned(Plugin2Manager.java:3289)
at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3207)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1536)
at java.lang.Thread.run(Thread.java:695)`
症状表明 Java 6 插件假定签名的小程序应该在all-permissions
模式下运行,并认为sandbox
清单中的请求是错误的。换句话说,它忽略了标签中的permissions
参数。applet
除了将小程序设置为在模式下运行之外,有谁知道我有什么方法可以帮助我的用户all-permissions
?我宁愿留在沙盒中,因为我不希望人们害怕使用 Wordle,也因为我不想创建攻击面。