java.net.SocketPermission - 奇怪的行为

时间:2011-09-06 20:34:40

标签: java security applet crossdomain.xml

我正在创建一个java applet来收集和处理来自其他网站的一些数据。小程序是未签名的,据我所知,出于安全原因,阻止了对其他站点的访问。

然而,似乎至少有一个其他网站没有被阻止。我试过这段代码:

package where;

import java.awt.BorderLayout;
import java.awt.Container;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JTextArea;

public class TestPermissions extends JApplet {
JTextArea txt = new JTextArea();
public void openURL(String site)  {
    txt.append(site+": ");
    try {
        URL url = new URL(site);
        BufferedReader in = new BufferedReader(
                new InputStreamReader(
                        url.openStream()));
        txt.append("Succes\n");
    } catch (Exception e) {
        txt.append("Failed\n");
        txt.append(e.getMessage()+"\n");
        System.err.println(e.getMessage());
    }

}
public void init() {
    openURL("http://www.buienradar.nl/");
    openURL("http://buienradar.nl/");
    openURL("http://www.google.nl/");
    openURL("http://whatismyipaddress.com/");
    openURL("http://www.google.com/");
    openURL("http://www.nrg.eu/");
    openURL("http://www.ecn.nl/");
    Container cp = getContentPane();
    cp.setLayout(new BorderLayout());
    cp.add(BorderLayout.CENTER, txt);
}
}

结果是:

http://www.buienradar.nl/: Failed
access denied (java.net.SocketPermission www.buienradar.nl:80 connect,resolve)
http://buienradar.nl/: Failed
access denied (java.net.SocketPermission buienradar.nl:80 connect,resolve)
http://www.google.nl/: Failed
access denied (java.net.SocketPermission www.google.nl:80 connect,resolve)
http://whatismyipaddress.com/: Succes
http://www.google.com/: Failed
access denied (java.net.SocketPermission www.google.com:80 connect,resolve)
http://www.nrg.eu/: Failed
access denied (java.net.SocketPermission www.nrg.eu:80 connect,resolve)
http://www.ecn.nl/: Failed
access denied (java.net.SocketPermission www.ecn.nl:80 connect,resolve)

我确实理解“拒绝访问”的回复,但为什么要授予访问权限 http://whatismyipaddress.com

我欢迎回答或提示或建议以供参考。

亲爱的达克韦,

感谢您的回复。

我的服务器名称不是whatismyipaddress.com。

我将applet放在服务器上: http://www.vitanova.co.nr/test/TestPermissions.html

代码位于:

http://www.vitanova.co.nr/test/where/TestPermissions.java

另外在服务器上放置另一个applet,从whatismyipaddress.com获取数据(实际上是PC的estmated位置)并尝试从buienradar获取该位置的天气数据,后者由于applet安全性而失败。

http://www.vitanova.co.nr/test/ReadURL.html

代码位于:

http://www.vitanova.co.nr/test/where/ReadURL.java

3 个答案:

答案 0 :(得分:2)

这是自6u10以来的crossdomain.xml功能。看看http://whatismyipaddress.com/crossdomain.xml

<?xml version="1.0"?>
<cross-domain-policy>
  <allow-access-from domain="*" />
</cross-domain-policy>

答案 1 :(得分:0)

What Applets Can and Cannot Do

我能想到一些可能错误的事情:

  • 您的服务器名称为whatismyipaddress.com(小程序可能会“回家”)
  • 您的测试代码中的错误(您有更多代码吗?)
  • JVM错误(不太可能)

答案 2 :(得分:0)

Crossdomain.xml无法解决您的问题。您必须在applet上签名才能使其适用于跨域。