Вопрос по java, javascript – Как получить подписанный Java-апплет для выполнения привилегированных операций при вызове из неподписанного Javascript?

7

Подписанные Java-апплеты имеют такой же уровень безопасности, как и обычное Java-приложение, работающее на клиенте. Для конкретного проекта яneed эти разрешения, и яneed выполнять привилегированные операции в результате вызова 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

Ваш Ответ

2   ответа
0

Стоит добавить: сделайте свою приватизацию drun() метод настолько мал и самодостаточен, насколько это возможно. Очевидно, вы могли бы просто вызвать метод init () вашего подписанного апплета как привилегированныйrun() который, в свою очередь, выполняет действительный апплет, но он просто просит злоупотреблять, злоупотреблять случайно или прямо эксплуатировать.

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

8

Используйте класс java.security.AccessController.

Существует doPrivilegedAction и doPrivilegedExceptionAction, которые делают именно то, что вам нужно.

Например:

AccessController.doPrivileged(new PrivilegedAction() {
            public Object run() {
               .. do something that only works with signed applets ..
            }
        });

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