2011-02-15 1 views
0

私はJavascript(LiveConnect)で関数を呼び出すと、アクセスエラーが発生します。Java AccessControlExceptionはLiveConnectでのみ

アプレットは関数postDataを呼び出して応答を表示します(これは素晴らしい)。今、私はこの関数をjava.security.AccessControlException:access denied(java.net.SocketPermission 174.132.167.66:80 connect、resolve)というdocument.applets[0].postDataのようなアプレット[]配列経由でこの関数を呼び出すと、ソケット/パーミッションエラーが発生します。

内部で呼び出された同じ関数がうまく機能しますが、javaScriptから呼び出されるとアクセス制御エラーが発生します。

誰もこれまでのような問題がありましたか?

+0

私はSigned Jarを使って作業しています... –

+0

Live Connectからの呼び出しには(たとえjarが署名/承認されていても)アクセス許可がないことがわかりましたが、回避策があります:http ://blog.carrythezero.com/ –

答えて

3

最近、特にMacのFirefoxで同じ問題が発生しました。私はブロックでSwingUtilities.invokeLater()を使用していた。

invokeLaterコールをAccessController.doPrivileged()ブロックでラップする方法でした。例えば、私はJavaScriptから呼び出し可能ですsomeAction()と呼ばれる私のアプレットのメソッドを持っている場合、私はどうなる:

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

このアプローチは、Firefoxで私のために問題を解決するように見えました。 Safariの同じOriginの問題を回避することはできませんが、たとえば、アプレットとは別のドメインからJavascriptを提供したい場合などです。

更新 私はこれが機能するためにinvokeLater部分が不要であることを言及する必要があります。それはちょうど私が使ったことが起こったことです。

関連する問題