2011-02-15 3 views
0

Я получаю ошибки доступа, только когда я вызываю функции с помощью Javascript (LiveConnect).Java AccessControlException только с LiveConnect

Апплет вызывает функцию postData и отображает ответ (это отлично работает). Теперь, если я вызываю эту функцию из Javascript через массив апплетов [], например document.applets[0].postData, я получаю Socket/Permissions Error: uncaught exception: java.security.AccessControlException: access denied (java.net.SocketPermission 174.132.167.66:80 connect, resolve)

те же функции, которые называются внутренне, отлично работают, но я получаю ошибки управления доступом при вызове из javaScript.

У кого-нибудь были такие проблемы раньше?

+0

Я должен добавить, что я работаю с подписанным банком ... –

+0

Я выяснил, что любые вызовы, сделанные в Live Connect, не будут иметь никаких прав (даже если банку подписано/принято), это обходное решение: http : //blog.carrythezero.com/ –

ответ

3

Я недавно столкнулся с той же проблемой, в частности с Firefox на Mac. Я использовал SwingUtilities.invokeLater() в своем блоке.

Способ, которым я работал вокруг, состоял в том, чтобы обернуть звонок invokeLater в блок AccessController.doPrivileged(). Например, если у меня есть метод, на мой апплет под названием someAction(), что это вызывается из JavaScript, я хотел бы сделать:

void someAction() { 
    AccessController.doPrivileged(new PrivilegedAction() { 
    public Object run() { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       // some privileged action here 
      } 
     }); 
    } 
    }); 
} 

Такой подход, казалось, решить эту проблему для меня в Firefox. Это не затрагивает проблемы Same Origin в Safari, хотя, например, если вы хотите обслуживать Javascript из другого домена, чем апплет.

Update я должен отметить, что invokeLater часть не требуется для этой работы; это то, что я использовал.

Смежные вопросы