2011-09-06 10 views
3

다른 웹 사이트의 데이터를 수집하고 처리하기 위해 Java 애플릿을 만들었습니다. 애플릿은 서명되지 않았으므로 보안상의 이유로 다른 사이트에 대한 액세스가 차단됩니다.java.net.SocketPermission - 이상한 행동

그러나 다른 사이트 중 하나 이상이 차단되지 않은 것으로 보입니다. 이 코드 시도 :

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) 

나는 repsonses "액세스 거부"이해한다, 그런데 왜 액세스 http://whatismyipaddress.com

내가 대답을 환영

나에게 부여 된 힌트 또는 제안을 참조하십시오.

친애하는 Dacwe,

답장을 보내 주셔서 감사합니다.

내 서버의 이름이 whatismyipaddress.com이 아닙니다. 실제로 (또한

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

가 whatismyipaddress.com로부터 데이터를 취득하여 서버에 다른 애플릿 입력 : http://www.vitanova.co.nr/test/TestPermissions.html

코드에서이다

난 서버에 애플릿을 넣어 PC의 위치를 ​​추정), 해당 위치에 대한 buienradar로부터 기상 데이터를 얻으려고 할 때 애플릿 보안 때문에 후자가 실패합니다.

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

답변

0

What Applets Can and Cannot Do를 참조하십시오에서

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

코드입니다.

내가 잘못 될 수있는 몇 가지 생각할 수 :

  • 서버의 이름이 테스트 코드에
  • 버그 (애플릿은 "집에 전화"수) whatismyipaddress.com이다 (당신은 더 많은 코드가 있습니까?)
  • JVM 버그 (가능성이되지 않음)
+0

내 서버의 이름이 whatismyipaddress.com이 아닙니다. 애플릿을 서버에 설치했습니다. [link] (http://www.vitanova.co.nr/test/TestPermissions.html) – jacquesb

+0

고마워, 내 질문에 더 많은 정보를 추가했습니다. – jacquesb

0

Crossdomain.xml은 문제를 해결하지 못합니다. 교차 도메인에서 작동하려면 애플릿에 서명해야합니다.