java.security.AccessControlException появляется случайным образом в апплете, хотя он должен иметь разрешение - PullRequest
0 голосов
/ 03 мая 2011

У меня есть апплет, который выдает исключение java.security.AccessControlException при попытке доступа к веб-странице.Я знаю, что апплетам разрешен доступ только к тому же хосту, с которого они сами были загружены.Рассматриваемая веб-страница находится на том же хосте, но я все еще получаю эту ошибку.

Ошибка не возникает при первом запуске апплета.Когда браузер перезапускается и апплет перезапускается, возникает исключение.Если страница затем перезагружается, исключение исчезает.

Ошибка происходит из этого кода:

JTextPane.setPage(URL);

Перед этим кодом существуют другие веб-ресурсы, которые загружаются апплетом, и онине выбрасывайте никаких исключений.

Выдается выбрасываемое исключение:

java.security.AccessControlException: access denied
(java.net.SocketPermission 131839-QR1WS02:18080 connect,resolve)
java.lang.RuntimeException: java.security.AccessControlException: access
denied (java.net.SocketPermission 131839-QR1WS02:18080 connect,resolve)
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(Unknown Source)
   at java.net.HttpURLConnection.getResponseCode(Unknown Source)
   at javax.swing.JEditorPane.getStream(Unknown Source)
   at javax.swing.JEditorPane.setPage(Unknown Source)
   at Browser.setPage(Browser.java:76)

Сразу после создания этого исключения, другая веб-страница с почти таким же URL-адресом доступна без проблем.

Есть идеи, почему это происходит, казалось бы, случайно?

Я тестировал с различными браузерами с одинаковым результатом.

Спасибо!

Обновление: похоже,ошибка с JTextPane.setPage (URL).Я сделал обходной путь, подобный следующему:

try {
        pane.setPage(u);
    } catch (Exception e) {
        try {               
            BufferedReader reader = new BufferedReader(new InputStreamReader(u.openStream()));
            String page = "";
            while(reader.ready()) {
                page += reader.readLine();
            }
            pane.setContentType("text/html");
            pane.setText(page);
        } catch (Exception e1) {
        }
    }

По сути, если setPage (URL) выдает исключение, этот код вместо этого попытается загрузить содержимое того же URL-адреса и вручную установить содержимое JTextPane,Пока что, похоже, это исправляет ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...