Почему мой апплет получает исключение java.security.AccessControlException: доступ запрещен (java.net.SocketPermission…) и как этого избежать это?

Я не думаю, что предварительные объявления возможны даже с typedef. Использование struct, enum и union позволяет пересылать объявления, когда зависимости (знают о них) являются двунаправленными.

Стиль: использование typedef в C ++ имеет смысл. Это может почти понадобиться при работе с шаблонами, которые требуют нескольких и / или переменных параметров. Typedef помогает сохранить правильное именование.

Не так на языке программирования Си. Использование typedef чаще всего служит не для того, чтобы запутать использование структуры данных. Поскольку только {struct (6), enum (4), union (5)} число нажатий клавиш используются для объявления типа данных, практически нет смысла использовать псевдонимы структуры. Это тип данных объединение или структура? Использование простого не типизированного объявления позволяет сразу узнать, какой это тип.

Обратите внимание, как Linux написан со строгим избеганием этого псевдонима. Результат - минималистский и чистый стиль.

17
задан Paŭlo Ebermann 22 August 2011 в 15:51
поделиться

8 ответов

Спасибо за ответы. Я не присудил награду, потому что, хотя ответы были все полезны, никто не решил проблему.

В конечном итоге я решил эту проблему, передав данные из апплета на веб-страницу, а затем выполняя вызов AJAX для связи с сервером. Конечно, это не самое элегантное решение, но оно доказало свою эффективность.

Попробуйте, и позвольте мне знать, работает ли он для вас.

Еще раз спасибо!

2
ответ дан 30 November 2019 в 12:26
поделиться

Вы можете переопределить файл политики безопасности по умолчанию, используемый SecurityManager.

1) Создайте текстовый файл (например, applet.policy)

2) Предоставьте все разрешения апплету

  grant {
   permission java.security.AllPermission;
  };

3) Запустите апплет с

-J-Djava.security.policy=applet.policy
16
ответ дан 30 November 2019 в 12:26
поделиться

У меня такая же проблема! JavaScript вызывает открытый метод апплета, который встроен в тот же документ. Это должно привести к тому, что апплет загрузит некоторые данные из «дома», поэтому соединение должно быть открыто в том же домене, откуда был загружен апплет, что должно быть разрешено и для неподписанных апплетов без дополнительных привилегий.

Я также распознал это исключение безопасности только в Safari (5.0.2 для Windows, JRE 1.6.0_22). Один и тот же апплет в IE и FireFox работает хорошо.

Я также считаю, что это ошибка в Java Sandbox Safari.


РЕДАКТИРОВАТЬ: Использование doPrivileged не помогло, но я нашел этот обходной путь: если вы «отделите» вызов JavaScript от запрошенного выполнения с помощью события таймера, выполнение больше не будет запрещено ограничением безопасности, которое устанавливает Safari. в игру здесь. Подробно:

  • метод, который вызывается из JavaScript, создает только javax.swing.Timer (чтобы запланировать одно событие, поэтому для свойства repeat должно быть установлено false). Вы можете установить задержку довольно короткой (например, 50 мс).
  • Вызов метода, предназначенный для вызова, должен быть помещен в прослушиватель ActionEvent (actionPerformed), который вызывается таймером.

Одна проблема, которая может усложнить задачу, заключается в том, что в контексте actionPerformed доступны только статические переменные. Если вызов JavaScript содержит переменные, они должны быть изначально вызваны методом в постоянную «буферную» переменную, из которой запланированное событие может впоследствии прочитать значение.

В моих тестах только javax.swing.Timer обеспечивал требуемую развязку, тогда как java.util.Timer не мог использоваться для этой цели.

4
ответ дан 30 November 2019 в 12:26
поделиться

У меня была такая же проблема. И решил это путем самостоятельной подписи апплета ...

использовал следующие шаги, и это сработало

javac AppletClass.java
jar cvf AppletClass.jar AppletClass.class
keytool -genkey -validity 3650 -keystore pKeyStore -alias keyName
keytool -selfcert -keystore pKeyStore -alias keyName-validity 3650
jarsigner -keystore pKeyStore AppletClass.jar keyName

просто ответьте на вопросы, которые он задаст, и он выполнит свою работу

ПРИМЕЧАНИЕ: я получил ошибку при локальном чтении / записи файл

9
ответ дан 30 November 2019 в 12:26
поделиться

Это апплет? Если это так, вам нужно подписать свой апплет, чтобы он имел доступ к сокету (что, кажется, то, что вы делаете ...)

Дополнительную информацию см. Здесь:

http://java.sun.com/developer/onlineTraining/Programming/JDCBook/signed.html

0
ответ дан 30 November 2019 в 12:26
поделиться

В Linux это работает.

Кнопка Add to cart выполняет функцию

  function saveLayout() {

    showSaveMsg();
    var status = document.app.buy();
    var loc = "http://www.cengraving.com/s/cart";

    if (status == 'GOOD') {
      window.location = getCartUrl();
    } else {
      showErrorMsg(status);
    }
  } 

Некоторые замечания:

  • Это нормально, что локальная переменная loc определяется после приложения Вызов и не используется в любом случае?

  • Кроме того, try catch может помочь (в Javascript, завершение вызова app.buy()).

  • Кроме того, я провел небольшое исследование в сети, и некоторые люди - с той же ошибкой, но с другим использованием - сообщают о проблеме ClassPath. У вас есть что-то конкретное, что могло бы помешать использованию соответствующей JRE?

0
ответ дан 30 November 2019 в 12:26
поделиться

Это проявляется как исключение безопасности, но проблема действительно в плохом URL. Если вы проследуете за стеком, вы увидите, что существует исключение MalformedURLE.

Это, скорее всего, вызвано передачей URI куда-то, который ожидал URL Через API LiveConnect, судя по всему. Я предполагаю, что он не находит имя хоста там, где его ожидают, и пытается подключиться к стандартному, возможно, локальному хосту. Это запрещено пока SecurityManager и, следовательно, SecurityException.

В href вы можете использовать URI (например, HREF = "/ somepath"), потому что браузер разрешает это по URL для самой страницы, чтобы получить полный URL (например, http://example.com /somepath).

Вы можете сделать это в Java, используя [соответствующий конструктор URL] [1].

Обновление: Ах, я неправильно прочитал; Я думал, что это была одна трассировка стека.

Раньше была ошибка, когда liveconnect мог получить доступ к jar: url и получить произвольное соединение с сокетом. Исправление для этого может вызывать проблему с открытием соединений url из потока liveconnect. Что произойдет, если в методе buy вы запустите поток для выполнения соединения?

[1]: http://download.oracle.com/javase/6/docs/api /java/net/URL.html#URL(java.net.URL, java.lang.String)

0
ответ дан 30 November 2019 в 12:26
поделиться

Песочница JRE пытается предотвратить вызовы методов, создаваемых javascript, для совершения вредоносных действий, но единственное, что она делает, - это усложняет жизнь программистов.

Лучший обходной путь, который я нашел, - это создать продюсера & amp; очередь событий шаблона потребительского дизайна, которая реализует очень слабую связь между вызовами, созданными в JavaScript, и фактической «грязной работой».

Что действительно отстой, так это то, что код, который отлично работает в XP или Win7, может вызвать исключение в Vista.

0
ответ дан 30 November 2019 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: