我正在开发非标准应用程序。基本上它是SWT应用程序 使用嵌入式Mozilla浏览器(mozilla-interfaces-1.9.2.12.jar,mozilla-glue-1.9.2.12.jar) 应显示包含applet的html页面(由我自己开发)。 这些小程序已签名,证书将导入密钥库。跑步时 标准独立Mozilla浏览器中的applet一切运行良好。
即使正常运行我的SWT应用程序(我的意思是作为一个独立的Java桌面应用程序 withou SecurityManager)一切正常 - 嵌入式浏览器出现并显示html 带小程序的页面。
然而,当我尝试通过Java Web Start(jnlp)运行此应用程序时,我遇到了麻烦。 我想我的jnlp定义得很好,它包含了我通过互联网讨论找到的所有标签。 所以有例如
<security>
<all-permissions/>
</security>
等。 我的SWT应用程序,分别是它的所有jar文件都是签名的(与applet使用的证书相同)。 它开始没问题,它执行的操作在没有所有权限和签名的情况下是不允许的, 它甚至显示SWT窗口(因此SWT本身工作正常),但它应该显示嵌入式浏览器 我收到了UnsatisfiedLinkException。有趣的是,当我创建.java.policy文件时 一些特定的权限集,它可以正常工作,applet也能正常工作。扮演角色 Sherlock Holmes我发现这组权限包含
java.io.FilePermission
java.lang.RuntimePermission
+ permissions that are neccessary for applets.
对你们中的任何人都有意义吗?它看起来像swt mozilla浏览器在某种程度上运行 特定的SecurityManager忽略了应用程序本身已签名的事实以及标记 存在于我的jnlp文件中。
当我加载没有applet的页面时,仍然提到需要显示两个权限 浏览器窗口。我想在没有任何.java.policy文件的情况下运行此应用程序 没有用户方面的额外设置。我很欣赏每一条建议。
提前谢谢。
Vojta
答案 0 :(得分:0)
不确定是否存在同样的问题,因为我从未使用过applet,但在使用捆绑的xulrunner通过webstart运行基于SWT浏览器的应用程序时,我也遇到了问题。
一个解决方法是在java代码中设置策略(就在创建浏览器实例之前......)
Policy.setPolicy(new Policy() {
public PermissionCollection getPermissions(CodeSource codesource) {
Permissions perms = new Permissions();
perms.add(new AllPermission());
return(perms);
}
public void refresh() { }
}
我记得Windows XP仍然无法运行JNLP。但是Windows 7,Linux和Mac OS X的几个版本都可以。