我需要一个小程序来打开插座并与在下载小程序(最终用户计算机)上侦听的服务器进行通信。

与我阅读的有关小程序安全性的内容相反,似乎甚至签名的小程序也无法打开下载的其他主机的插座(在同一台计算机上,它可以完美工作)

我已经使用-selfcert认证了小程序,使用Jarsigner签名,并且每当试图打开其他主机的插座时,我都会得到:

Java.lang.Exception: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:9999 connect,resolve)

我什至尝试更改 Java 策略文件,尽管使用签名的小程序不需要这样做:

grant codeBase "http://applethost:8080/socket" { permission java.security.AllPermission; permission java.lang.RuntimePermission "usePolicy"; };

sigend 小程序有什么用,它们是否可以连接到不同的主机?

有帮助吗?

解决方案

是的,当你加载你的小程序时,如果你选择接受它的证书并信任它,它就会被授予AllPermission,其中包括SocketPermission。我之前编写了一个签名的小程序,它连接到加载它的主机以外的主机。您可以尝试暂时更改您的 java 策略文件以仅具有

grant {
  permission java.security.AllPermission;
};
  • 查看您的策略文件,看看它是否定义了任何其他policy.url 位置,也许它们会产生干扰。
  • 检查一下你的浏览器设置是否有 JavaScript。
  • 确保您接受该小程序的证书并将其安装到您的站点证书列表中。
  • 确保您拥有的 grant codeBase 行与小程序清单中的代码库相同。
  • 在尝试连接之前,您可以尝试打印出您的小程序拥有的权限列表。
  • 您可以尝试在小程序内以编程方式授予 AllPermission。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top