Como posso obter um Applet Java assinado para executar operações privilegiadas quando chamado de Javascript não assinado?
Os miniaplicativos Java assinados têm a mesma habilitação de segurança que um aplicativo Java normal em execução no cliente. Para um projeto em particular, euprecisar essas permissões, e euprecisar para executar operações privilegiadas como resultado de uma chamada JavaScript.
Agora, o problema é que, pelo menos para o Firefox 3 no Ubuntu (navegador de destino e plataforma), quando um método de applet é invocado através de JavaScript não assinado, ele perde suas permissões especiais. Como assinar o JavaScript não é uma opção, preciso de uma maneira de contornar essa restrição.
Uma maneira de conseguir isso é criar um thread quando o applet é iniciado e chamar métodos nesse thread sempre que o thread principal receber as chamadas do JavaScript. Eu implementei um protótipo funcional dessa idéia, mas achei um pouco desajeitado, porque ele usa muita reflexão e não é tão facilmente reutilizável quanto eu gostaria.
Existe uma maneira padrão comum de fazer o que estou tentando fazer? E, se a minha ideia é o caminho certo a seguir, como você poderia implementá-la de maneira reutilizável? O que estou tentando alcançar é um framework que permite que essa coisa de "execução de métodos em um thread privilegiado" seja usada para uma variedade de objetos. A solução ideal e utópica seria algo como:
<code>// 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 </code>