1

나는 다음과 같은 HttpGet() 함수가 있습니다Java 애플릿 AccessControlException가 (아파치 HttpClient를)

HttpGet request = new HttpGet(url); 

    request.setHeader("User-Agent", userAgent); 
    request.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
    request.setHeader("Accept-Language", "en-US,en;q=0.5"); 
    if (!cookies.equals("")) 
     request.setHeader("Cookie", this.cookies); 

    for (Map.Entry<String, String> header : tempHeaders.entrySet()) 
    { 
     request.setHeader(header.getKey(), header.getValue()); 
    } 
    tempHeaders.clear(); 

    HttpResponse response = client.execute(request); 

이 기능은 아파치 HttpClient를 래핑 브라우저() 클래스의 일부입니다. 애플릿 뷰어에서 애플릿을 실행하면 모든 것이 잘 동작합니다.

java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:80" "connect,resolve") 
    at java.security.AccessControlContext.checkPermission(Unknown Source) 
    at java.security.AccessController.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkConnect(Unknown Source) 
    at sun.plugin2.applet.SecurityManagerHelper.checkConnectHelper(Unknown Source) 
    at sun.plugin2.applet.AWTAppletSecurityManager.checkConnect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:117) 
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:178) 
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304) 
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) 
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) 
    **at vidinstant.HttpBrowser.Get(HttpBrowser.java:60)** 
    at vidinstant.ServerThread$1.run(ServerThread.java:201) 
    at vidinstant.ServerThread$1.run(ServerThread.java:197) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at vidinstant.ServerThread.GetLink(ServerThread.java:196) 
    at vidinstant.ServerThread.run(ServerThread.java:95) 
당신은 예외의 "소스"브라우저 클래스의 라인 60에 있음을 알 수

, 더 정확하게, 그것은 이것이다 : 나는 페이지에 애플릿을 삽입 할 때, 나는 다음과 같은 예외를 얻을 코드의 위의 인용에서 라인 : 그것에 :

HttpResponse response = client.execute(request); 

내가 자체 서명 된 매니페스트 파일이 라인 "모든 권한 권한"이 .JAR와 애플릿을 가지고있다.

왜이 예외가 발생하며 액세스가 거부 되었습니까? 브라우저에서 애플릿을 실행하는 사용자는 허용 및 차단 안 함을 클릭하지만 여전히 작동하지 않습니다. 아파치의 라이브러리 .jars도 서명해야합니까? 그들의 명단에 "모든 허락"이 있어야합니까? 사용자가 Java 정책 파일을 조작하지 않고 이러한 기능을 실행하는 권한을 얻는 방법?

답변

1

Apache의 라이브러리 .jars에도 서명해야합니까?

예. '90 %'의 보안은 허용되지 않습니다. 배포 된 코드는 또는 안전하지 않은 것으로 간주됩니다..