【发布时间】:2014-10-21 14:36:35
【问题描述】:
我在一个简单的 HTML 页面上插入了一个 Java Applet:
<applet width="100%" height="100%" id="StatApplet" code="stat.applet.StatApplet.class" archive="stat.jar">
<PARAM NAME="_cx" VALUE="25903">
<PARAM NAME="_cy" VALUE="19738">
<param name="frame" value="0">
<param name="module" value="1">
<param name="count" value="4">
<param name="image" value="RSload.gif">
<param name="boxbgcolor" value="#ffffff">
<param name="boxmessage" value="Monitor loading">
</applet>
小程序使用有效的 GlobalSign 证书进行签名。 JAR 和 HTML 文件放置在嵌入式 Web 服务器上,地址为 http://192.168.0.91/、Beck IPC SC143。小程序打开一个到加载它的服务器的套接字连接:
try {
final int CONNECT_ETHERNET_TIMEOUT_MS = 5000;
final int PORT_STATUSMON = 945;
String host = getCodeBase().getHost(); // get host address
if (host.equals("")) {
host = getParameter("host"); // to run applet from eclipse
}
InetAddress inetAddress = InetAddress.getByName(host);
Socket ethernetSocket = new Socket();
ethernetSocket.connect(new InetSocketAddress(inetAddress, PORT_STATUSMON), CONNECT_ETHERNET_TIMEOUT_MS);
ethernetSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
在 Java 7 Update 45 之前一切正常,但在将 VM 升级到 Java 8 Update 25 后出现安全异常:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "192.168.0.91:945" "connect,resolve")
connect() 处抛出异常。小程序可以与加载它的主机进行套接字连接,这不是真的吗?
【问题讨论】:
-
感谢 Holger 将我指向该线程(之前没有看到它)。
标签: java security sockets applet