使用Java 8访问被拒绝(" java.net.SocketPermission" ...)

时间:2014-10-21 14:36:36

标签: java security sockets applet

我在一个简单的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文件放置在http://192.168.0.91/Beck IPC SC143的嵌入式Web服务器上。 applet打开与其加载的服务器的套接字连接:

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()处抛出异常。 applet是否可以与从中加载的主机进行套接字连接?

1 个答案:

答案 0 :(得分:0)

确保您的主机名已提供applet.getDocumentBase().getHost()

如果您尝试连接到127.0.0.1但是从192.168.x.x或10.0.0.x提供服务,那么您将获得AccessControlException

你应该使用与此相关:

new Socket( applet. getDocumentBase (). getHost (), 4444 )
相关问题