2011-09-06 10 views
3

Je créais une applet Java pour collecter et traiter des données provenant d'autres sites Web. L'applet n'est pas signée et, si je comprends bien, l'accès à d'autres sites est bloqué pour des raisons de sécurité.java.net.SocketPermission - comportement étrange

Cependant, il semble qu'au moins l'un des autres sites n'est pas bloqué. J'ai essayé ce code:

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); 
} 
} 

Et le résultat est:

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) 

Je comprends le "accès refusé" repsonses, mais pourquoi l'accès a été accordé à http://whatismyipaddress.com

Je me félicite de réponses ou conseils ou suggestions pour référence.

Cher Dacwe,

Merci pour votre réponse.

Le nom de mon serveur n'est pas whatismyipaddress.com.

Je mis l'applet sur un serveur: http://www.vitanova.co.nr/test/TestPermissions.html

le code est à:

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

En outre applet mettre une autre sur le serveur qui obtient des données à partir whatismyipaddress.com (en fait la emplacement déterminé du PC) et essaie d'obtenir des données météorologiques de buienradar pour cet emplacement, ce dernier échoue en raison de la sécurité de l'applet.

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

le code est à:

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

Répondre

0

Voir What Applets Can and Cannot Do.

je pouvais penser à certaines choses qui pourraient être mal:

  • nom de votre serveur est whatismyipaddress.com (l'applet peut « appeler à la maison »)
  • Bug dans votre code de test (vous avez plus de code?)
  • bug machine virtuelle Java (peu probable)
+0

Le nom de mon serveur n'est pas whatismyipaddress.com. J'ai mis l'applet sur un serveur: [link] (http://www.vitanova.co.nr/test/TestPermissions.html) – jacquesb

+0

Merci, j'ai ajouté plus d'infos à ma question. – jacquesb

0

Crossdomain.xml ne résout pas votre problème. Vous devez signer votre applet pour le faire fonctionner avec cross-domain.