Pode applets assinados conectar com um host diferente de onde provêm?
Pergunta
Eu preciso de um applet para abrir um socket e se comunicar com uma escuta servidor em o host local para o qual o applet baixado (a máquina do usuário final).
ao contrário do que eu li sobre a segurança do applet, parece que os applets ainda assinados Não é possível abrir um soquete para um host diferente de onde foram transferidos (na mesma máquina funciona perfeitamente)
Eu certificaram o applet usando -selfcert, assinou usando jarsigner, e ainda, sempre que ele tenta abrir um soquete para um host diferente, eu recebo:
Java.lang.Exception: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:9999 connect,resolve)
Eu até tentei mudar o arquivo de política Java, embora com applets assinados não é obrigado a fazê-lo:
grant codeBase "http://applethost:8080/socket" {
permission java.security.AllPermission;
permission java.lang.RuntimePermission "usePolicy";
};
O que é o negócio com applets sigend, eles podem connet a um host diferente ou não?
Solução
Sim, quando você carrega o seu applet, se você optar por aceitar o seu certificado e confiar nele, que é concedido AllPermission, que inclui SocketPermission. Eu escrevi um applet assinado antes que se conecta a um host diferente daquele a partir do qual ele foi carregado. Você poderia tentar temporariamente mudar o seu arquivo de política java apenas para ter
grant {
permission java.security.AllPermission;
};
- Procure no seu arquivo de política para ver se ele define quaisquer outros locais policy.url, talvez eles estão interferindo.
- Verifique as configurações do seu navegador para javascript talvez.
- Certifique-se de que você aceite o certificado para o applet e que é instalado à sua lista de certificados de site.
- Certifique-se a linha codeBase concessão que você tem é o mesmo que o código base no manifesto do seu applet.
- Você poderia tentar imprimir a lista de permissões que seu applet tem antes de tentar a conexão.
- Você poderia tentar conceder programaticamente AllPermission de dentro do applet.