我在一个简单的HTML页面上插入了一个Java Applet,该页面位于http://localhost:8080/index.html:
<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();
我遇到了以下错误:
access denied (java.net.SocketPermission 127.0.0.1:8080 connect,resolve)
看起来Java代码将域名 localhost 解析为其等效的IP地址,因此会引发跨域安全限制。当我从http://127.0.0.1:8080/index.html执行相同的代码时,它可以正常运行。lib.jar文件已签名。
有没有什么方法可以避免这种情况?
getCodeBase()
,不要使用硬编码位置。 - bestsss