2

我正在开发非标准应用程序。基本上它是使用嵌入式 Mozilla 浏览器(mozilla-interfaces-1.9.2.12.jar、mozilla-glue-1.9.2.12.jar)的 SWT 应用程序,它应该显示包含小程序的 html 页面(也是我自己开发的)。这些小程序经过签名并将证书导入到密钥库中。在标准的独立 Mozilla 浏览器中运行小程序时,一切正常。

即使正常运行我的 SWT 应用程序(我的意思是作为没有 SecurityManager 的独立 Java 桌面应用程序)一切正常 - 嵌入式浏览器出现并显示带有小程序的 html 页面。

但是,当我尝试通过 Java Web Start (jnlp) 运行此应用程序时,我遇到了麻烦。我想我的 jnlp 定义明确,它包含我能够在 Internet 讨论中找到的所有标签。所以有例如

<security>
     <all-permissions/>
</security> 

等我的 SWT 应用程序,resp。它的所有 jar 文件都已签名(与用于小程序的证书相同)。它开始正常,它执行在没有所有权限和签名的情况下不允许的操作,它甚至显示 SWT 窗口(因此 SWT 本身工作正常),但是当它应该显示嵌入式浏览器时,我得到 UnsatisfiedLinkException。有趣的是,当我创建具有某些特定权限集的 .java.policy 文件时,它可以正常工作,applet 也可以正常工作。扮演福尔摩斯的角色我发现这组权限包含

  java.io.FilePermission 
  java.lang.RuntimePermission 
+ permissions that are neccessary for applets.

这对你们中的任何人都有意义吗?看起来 swt mozilla 浏览器在某种特定的 SecurityManager 中运行,它忽略了应用程序本身已签名并且标记存在于我的 jnlp 文件中的事实。

当我加载没有小程序的页面时,仍然提到两个权限是显示浏览器窗口所必需的。我想在没有任何 .java.policy 文件且用户端没有额外设置的情况下运行此应用程序。我感谢每一个建议。

先感谢您。

沃伊塔

4

1 回答 1

0

不确定是否同样的问题,因为我从未使用过小程序,但在尝试通过 webstart 运行基于 SWT-Browser 的应用程序与捆绑的 xulrunner 时,我也遇到了问题。

一种解决方法是在 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 可以。

于 2011-04-15T23:35:18.457 回答