У меня была ошибка в нашем (подписанном кодом) java-апплете "доступ запрещен (java.net.SocketPermission xxxx: 443 connect_resolve." У нас была html кнопка "save", которая вызывала (через javascript) метод апплета для сохранения файл, загруженный в апплет, на веб-сервер. После некоторых обширных исследований Google я исправил его, обернув код метода сохранения нашего апплета в doPrivileged (). Ошибка, похоже, исправлена, люди счастливы.
Я хочу подтвердить, что я полностью понимаю исходные обстоятельства и решение, которое я применил (я знаю, что время вспять не позволило мне действительно исследовать проблему).
Что меня особенно смущает, так это то, что мы тестировали наш апплет на тестовом сервере в нашей собственной сети и никогда не получали эту ошибку, пока не попробовали кнопку «сохранить» на javascript с клиентского компьютера, внешнего по отношению к нашей сети. Итак, на данный момент, я просто делаю обоснованное предположение: именно так работает механизм песочницы java-апплета.
Это правда? Пока клиентский апплет обращается к ресурсам веб-сервера с клиентского компьютера, который находится в той же доменной сети, он считается в стенах песочницы? И если клиентский компьютер является внешним по отношению к локальной сети веб-сервера, запрос апплета рассматривается вне стен песочницы и нуждается в doPrivileged? Или здесь есть другое объяснение, которого мне не хватает?
Мне не удалось найти в документации Sun или в Google ничего, что могло бы подтвердить или опровергнуть мое утверждение. Разъяснение от кого-то с большим опытом работы с Java-апплетами очень ценится