【发布时间】:2010-11-09 15:06:06
【问题描述】:
我在位于http://localhost:8080/index.html 的简单 HTML 页面上插入了一个 Java Applet:
<applet id="applet" code="SomeCode.class" archive="lib.jar" Width="1" Height="1"></applet>
Java Applet 有一个类似于以下代码的方法:
public void PostStuffToServer() {
String server = "http://localhost:8080/PostHandler.ashx";
URL u = new URL(server);
URLConnection con = u.openConnection();
con.setDoOutput(true);
con.getOutputStream().write(stream.toByteArray());
con.connect();
}
当我像这样从 JavaScript 执行小程序代码时:
obj = document.getElementById('applet');
obj.getClipboardImageURL();
我收到以下错误:
访问被拒绝(java.net.SocketPermission 127.0.0.1:8080 connect,resolve)
Java 代码似乎将域 localhost 解析为其等效的 IP 地址,因此引发了跨域安全限制。当我从http://127.0.0.1:8080/index.html 执行相同的代码时,它工作正常。 lib.jar 文件已签名。
有没有办法避免这种情况?
【问题讨论】:
-
尝试签署 lib.jar 和您正在使用的所有其他外部 jar 文件
-
不要使用 localhost!我还将解释原因:根本无法保证
localhost是 127.0.0.1。也总是使用小程序中的getCodeBase(),不要使用硬编码的位置。
标签: java javascript security applet liveconnect