Я разработал апплет, чтобы сделать снимок экрана и сохранить его на компьютере пользователя с помощью класса java.awt.Robot. Мне нужно встроить этот апплет в html-страницу (используя тег объекта), чтобы при нажатии на кнопку на веб-странице был сделан снимок экрана.
Сам апплет работает нормально, я протестировал его, добавив в него временный метод main и запустив его на своем локальном компьютере как обычное приложение Java.
Когда я испытываю трудности, я настраиваю разрешения для запуска из встроенного местоположения. Очевидно, что класс роботов несколько опасен, поэтому необходимо установить AWTPermission и подписать сам апплет.
Я прошел учебник по http://download.oracle.com/javase/tutorial/security/toolsign/index.html и сумел создать подписанный файл .jar, а затем файл политики, который позволил запустить демонстрационное приложение из этого учебника. Теперь я сталкиваюсь с проблемами в том, как согласовать то, что я узнал, с ситуацией, в которой будет использоваться мой апплет.
Моя целевая аудитория составляет около 100 машин, и мне нужно, чтобы она была исполняемой на всех из них. Я упаковал свой java-файл .class в .jar и подписал его, используя keytool и jarsigner. Затем я загрузил файлы .jar и .cer в каталог сервера, где размещены соответствующие страницы.
Однако: когда я затем использовал policytool для создания нового файла политики на одном из компьютеров для тестирования установки, я все еще не могу выполнить апплет из HTML. Я получаю Java.Security.AccessControlException Acess Denied java.awt.AWTPermission createRobot ошибки.
Я скорее подозреваю, что это политический шаг, который идет не так, поэтому я опишу шаги, которые я предпринял:
Я загружаю сертификат на локальный компьютер и генерирую из него хранилище ключей, запускаю «policytool» из этого каталога через командную строку
Я добавляю каталог на локальный компьютер, на котором сгенерировано хранилище ключей, и мой сертификат.
Затем я нажимаю кнопку добавления политики и ввожу псевдоним SignedBy.
Затем добавьте разрешения и выберите AWTPermission
Название цели я выбираю createRobot
Поле функции, которое я оставил пустым, так как не могу понять, что здесь применимо
Подписано в этом окне также оставлено пустым
Затем я нажимаю «ОК» и «Готово» и получаю предупреждение о том, что для псевдонима, введенного на первом шаге, нет открытого ключа. Я выполняю команду «сохранить как» и сохраняю свой файл политики в том же каталоге, в котором размещен сертификат и сгенерированное из него хранилище ключей.
Это не позволяет мне запускать апплет с веб-страницы, и мое ограниченное понимание этого аспекта программирования не дает никаких подсказок относительно того, что пошло не так.
Идеи, мысли, наблюдения? Если я не упомянул что-то явно, то я этого не сделал. Мой самый большой подозреваемый - предупреждение, которое я получаю, но я не могу понять, почему оно появляется
РЕДАКТИРОВАТЬ: Забыл упомянуть шаг. Я вручную добавил в свой файл jre \ lib \ security \ java.security строку 'policy.url.3 = file: / C: / Testing / debugpolicy', поскольку это путь и имя файла политики, которые я создал на предыдущих этапах. Мне также только что удалось удалить предупреждение, о котором я упоминал ранее, я смешивал свой псевдоним и давал псевдоним для личного хранилища ключей, а не для общего, при создании файла политики, однако я все еще сталкиваюсь с теми же проблемами