2011-02-15 4 views
0

Je reçois des erreurs d'accès, uniquement lorsque j'appelle les fonctions avec Javascript (LiveConnect).Java AccessControlException uniquement avec LiveConnect

L'applet appelle une fonction postData et affiche la réponse (cela fonctionne très bien). Maintenant, si j'appelle cette fonction de Javascript via le tableau applets [] comme document.applets[0].postData je reçois l'erreur Socket/Autorisations: exception non interceptée: java.security.AccessControlException: accès refusé (java.net.SocketPermission 174.132.167.66:80 connect, resolve)

La même fonction appelée en interne fonctionne très bien, mais je reçois des erreurs de contrôle d'accès lors de l'appel de javaScript.

Quelqu'un avait des problèmes comme ça avant?

+0

Je devrais ajouter, que je travaille avec un pot signé ... –

+0

J'ai découvert que tous les appels faits à partir de Live Connect n'auront aucune autorisation (même si le pot est signé/accepté) voici une solution de contournement: http : //blog.carrythezero.com/ –

Répondre

3

J'ai récemment rencontré le même problème, en particulier avec Firefox sur Mac. J'utilisais SwingUtilities.invokeLater() dans mon bloc cependant.

La façon dont j'ai travaillé autour de cela était d'envelopper l'appel invokeLater dans un bloc AccessController.doPrivileged(). Par exemple, si j'ai une méthode sur mon applet appelé someAction() qui est appelable à partir de JavaScript, je le ferais:

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

Cette approche semble résoudre le problème pour moi dans Firefox. Il ne contourne pas les problèmes de Same Origin dans Safari, par exemple, si vous voulez utiliser le Javascript à partir d'un domaine différent de celui de l'applet.

Mise à jour Je dois mentionner que la partie invokeLater n'est pas nécessaire pour que cela fonctionne; c'est juste ce que je suis en train d'utiliser.

Questions connexes