Java-апплет AccessControlException (apache httpclient)

У меня есть следующая функция HttpGet():

    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(), который является оболочкой для HttpClient Apache. Когда я запускаю апплет в средстве просмотра апплетов, все работает нормально. Однако, когда я вставляю апплет на страницу, я получаю следующее исключение:

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 .jars также быть подписаны? Нужно ли им иметь «все разрешения» в своем манифесте? Как получить разрешение на запуск таких функций, чтобы пользователю не приходилось возиться со своими файлами политик Java?


person liliumdev    schedule 14.12.2013    source источник


Ответы (1)


Должны ли библиотеки Apache .jars также быть подписаны?

да. Не допускается безопасность на 90%. Развернутый код считается либо безопасным, либо небезопасным.

person Andrew Thompson    schedule 14.12.2013