2010-01-27 2 views
2

트위터 계정에서 가장 최근 상태를 가져 오는 간단한 애플릿을 작성하고 있습니다. Eclipse에서 실행되는 javaw.exe에서 실행하면 정상적으로 작동합니다.java 애플릿에서 jtwitter (twitter API)를 통해 java.security.AccessControlException을 피하는 방법

java.security.AccessControlException : 액세스가 거부 (낸다 java.net.SocketPermission 연결 twitter.com:80, 해결)

이를 방지하는 방법에 대한 조언 브라우저에서 실행할 때, 나는 오류 ?

호출 :

private void updateStatus() { 
    try { 
     Twitter client = new Twitter("user", "pw"); 
     Status status = client.getStatus(); 
     addItem(status.toString()); 
    } 
    catch (Throwable t) { 
     addItem(t.getMessage()); 
    } 
} 

클라이언트에 연결이 성공한다. 예외를 throw하는 것은 getStatus() 호출입니다. 나는 이클립스가 javaw.exe에 "-Djava.security.policy = java.policy.applet"을 추가했음을 알았다. 브라우저가 아닌 이클립스에서 작동하는 이유와 관련이 있는지 확실하지 않았다. 실망스럽게도 Eclipse와 동일한 CL 매개 변수와 PATH를 사용하여 동일한 javaw.exe 명령을 직접 실행하려고 시도했습니다. 그러나 직접 실행하면 javaw.exe가 즉시 종료됩니다. jtwitter은 Twitter API의 간단한 래퍼입니다.

답변

2

브라우저 애플릿은 보안 권한이 낮은 샌드 박스에서 실행 중입니다. 특정의 GUI 조작 (애플릿이 백그라운드로 키 로거를 비밀리에 실행하는 것을 막기 위해서 (때문에))와 같은, 특정의 조작은 허가되지 않습니다. 분명히하려는 작업은 허용되지 않습니다.

이 문제를 해결하려면 애플릿에 서명해야합니다. 서명 된 애플릿은 정상적인 보안 권한으로 실행될 수 있습니다. 그렇게하려면 보안 인증서를 만들고 애플릿을 jarsigner으로 서명해야합니다.

작은 개인 프로젝트 인 경우 비싼 인증서를 구입할 필요가 없습니다. 자체 서명 된 인증서가 수행됩니다 (유일한 문제는 브라우저가 "인증서를 확인할 수 없음"또는 이와 비슷한 메시지를 팝업한다는 것입니다).

은 참조 : Signed applet tutorial

+0

은 매력 ... 작동합니다. 도움에 감사드립니다. – RickNotFred

0

데이브

@ 당신의 병을 얻는뿐만 아니라 당신이 특권 블록에 싸여 당신이 같은 권한을 표시 할 필요 코드를 확인해야 서명했다.

final String googleUrl = "www.google.com" 
URL url = (URL) AccessController.doPrivileged(new PrivilegedAction() 
    { 
     public Object run() 
     { 
      try 
      { 
       return new URL(googleUrl); 
      } 
      catch (MalformedURLException e) 
      { 
       e.printStackTrace(); 
       return null; 
      } 
     } 
    }); 
관련 문제