Подписанный апплет с кодом внутри PrivilegedAction выдает исключение PrivilegedAccessException при вызове из Javascript - PullRequest
2 голосов
/ 09 сентября 2011

У меня есть подписанный апплет, который выполняет некоторый код внутри PrivilegedAction.

public String somePublicMethod()
{
        String str = (String) AccessController.doPrivileged(new PrivilegedAction() 
        {
            public Object run() 
            {
                return someMethodThatReturnsAString();
            }
        });
        return str;
}

Здесь метод someMethodThatReturnsAString находится в суперклассе, а этот класс находится в стороннем банке, который также подписан. somePublicMethod выдает следующее исключение при вызове из Javascript

java.security.PrivilegedActionException: java.security.PrivilegedActionException: java.lang.reflect.InvocationTargetException
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.liveconnect.SecureInvocation.CallMethod(SecureInvocation.java:128)
at sun.plugin.liveconnect.SecureInvocation.access$300(SecureInvocation.java:51)
at sun.plugin.liveconnect.SecureInvocation$CallMethodThread.run(SecureInvocation.java:177)
Caused by: java.security.PrivilegedActionException: java.lang.reflect.InvocationTargetException
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.liveconnect.SecureInvocation$2.run(SecureInvocation.java:147)
... 4 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.plugin.javascript.JSInvoke.invoke(JSInvoke.java:20)
at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.plugin.javascript.JSClassLoader.invoke(JSClassLoader.java:72)
at sun.plugin.liveconnect.PrivilegedCallMethodAction.run(SecureInvocation.java:651)
... 6 more
Caused by: java.lang.NullPointerException
at java.lang.String.replace(String.java:2207)
... 16 more

Это происходит только в Safari в Mac OS X с установленной Java 1.6. Работает должным образом, если на клиентском компьютере установлена ​​Java 1.5.

Я видел подобные вопросы здесь в StackOverflow, в которых говорилось о AccessControlException, генерируемом из подписанных апплетов. Но это не так, поскольку выдается исключение PrivilegedAccessException, а апплет выполняет код как привилегированное действие, как это предлагается в ответах на эти вопросы.

Я даже пытался использовать PrivilegedExceptionAction, но это не помогло. Кто-нибудь сталкивался с этим раньше?

1 Ответ

3 голосов
/ 21 сентября 2011

Я нашел решение для этого.Проблема была не в апплете, а в коде JavaScript, который манипулирует строкой, возвращаемой методом апплета.Строка считалась объектом Java, а не объектом JavaScript, и это вызывало проблемы в Safari.Преобразование строки Java в строку JavaScript решило проблему.

Мне не удалось получить полную трассировку стека в консоли ошибок браузера, поэтому я полагался на журналы консоли Java.Сообщения журнала немного вводили в заблуждение, поскольку казалось, что эта ошибка возникла из апплета.

...