Подписанные Java-апплеты имеют тот же уровень безопасности, что и обычное Java-приложение, работающее на клиенте. Для конкретного проекта мне нужны эти разрешения, а мне нужно для выполнения привилегированных операций в результате вызова JavaScript.
Теперь проблема в том, что, по крайней мере для Firefox 3 в Ubuntu (целевой браузер и платформа), когда метод апплета вызывается через неподписанный JavaScript, он теряет свои специальные разрешения. Поскольку подписание JavaScript не является опцией, мне нужен способ обойти это ограничение.
Один из способов добиться этого - создать поток при запуске апплета и вызывать методы этого потока всякий раз, когда основной поток получает вызовы JavaScript. Я реализовал рабочий прототип этой идеи, но я нашел его немного неуклюжим, потому что он использует слишком много отражений и не так легко использовать повторно, как я бы хотел.
Есть ли общий, стандартный способ делать то, что я пытаюсь сделать? И, если моя идея - правильный путь, как бы вы реализовали ее повторно? То, чего я пытаюсь достичь, - это инфраструктура, которая позволяет использовать эту вещь «запуск методов в привилегированном потоке» для различных объектов. Идеальное утопическое решение было бы что-то вроде:
// when the applet starts-up
PrivilegedExecuter priv = new PrivilegedExecuter(myObject); //or MyClass.class
// ...
// inside a JavaScript-called method (myObject has myMethod)
priv.myMethod(); // myMethod is run synchronously in a privileged thread