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

Эта функция является частью класса Browser(), что обертывания для Apache 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 в классе Browser, точнее, именно этот строка из приведенного выше отрывка кода:

HttpResponse response = client.execute(request); 

у меня есть самозаверяющий апплет .jar и файл манифест имеет строку «Разрешения: все-разрешения» в нем.

Почему я получаю это исключение и почему отказ в доступе? Пользователь, который запускает апплет в своих браузерах, нажимает «Разрешить» и «Не блокировать», но он все равно не работает. Нужно ли подписывать также библиотеку Apache? Нужно ли им иметь «все-разрешения» в своем манифесте? Как получить разрешение на запуск таких функций без необходимости возиться со своими файлами политики Java?

ответ

1

Следует ли подписывать библиотеку Apache .jars?

Да. Защищенное «90%» безопасно. Развернутый код считается либо secure, ..или не защищен.

Смежные вопросы