java.net.SocketPermission - странное поведение - PullRequest
3 голосов
/ 07 сентября 2011

Я создавал Java-апплет для сбора и обработки некоторых данных с других веб-сайтов. Апплет не подписан, и, насколько я понимаю, доступ к другим сайтам заблокирован из соображений безопасности.

Однако, по крайней мере, один из других сайтов не заблокирован. Я попробовал этот код:

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

Я приветствую ответы или подсказки или предложения для справки.

Уважаемый Dacwe,

Спасибо за ваш ответ.

Имя моего сервера не whatismyipaddress.com.

Я разместил апплет на сервере: http://www.vitanova.co.nr/test/TestPermissions.html

код:

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

Кроме того, поместите еще один апплет на сервер, который получает данные с whatismyipaddress.com (собственно местоположение компьютера) и пытается получить данные о погоде из buienradar для этого местоположения, последнее не удается из-за безопасности апплета. *

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

код:

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

Ответы [ 3 ]

2 голосов
/ 05 октября 2011

Это функция crossdomain.xml, начиная с 6u10. Посмотрите на http://whatismyipaddress.com/crossdomain.xml

<?xml version="1.0"?>
<cross-domain-policy>
  <allow-access-from domain="*" />
</cross-domain-policy>
0 голосов
/ 18 апреля 2012

Crossdomain.xml не решает вашу проблему.Вы должны подписать свой апплет, чтобы он работал с междоменным доменом.

0 голосов
/ 07 сентября 2011

См. Что апплеты могут и не могут .

Я мог бы подумать о некоторых вещах, которые могут быть неправильными:

  • Имя вашего сервера whatismyipaddress.com (апплет может "позвонить")ваш тестовый код (у вас есть больше кода?)
  • ошибка JVM (маловероятно)
...