J'ai besoin d'une applet pour ouvrir une socket et communiquer avec un serveur en écoutant l'hôte local sur lequel l'applet a été téléchargé (la machine de l'utilisateur final).Les applets signées peuvent-elles se connecter avec un hôte différent d'où elles proviennent?
contrairement à ce que j'ai lu sur la sécurité de l'applet, il semble que même signé applets ne peuvent pas ouvrir une socket à un autre hôte à partir duquel ils ont été téléchargés (sur la même machine, il fonctionne parfaitement)
Je certifié l'applet en utilisant -selfcert, signé en utilisant jarsigner, et encore, chaque fois il tente d'ouvrir un socket à un autre hôte, je reçois:
Java.lang.Exception: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:9999 connect,resolve)
J'ai même essayé de changer le fichier de stratégie Java, bien qu'avec applets signées il n'est pas tenu de le faire:
grant codeBase "http://applethost:8080/socket" { permission java.security.AllPermission; permission java.lang.RuntimePermission "usePolicy"; };
Quel est le problème avec les applets sigend, peuvent-ils connet à un hôte différent ou non?
@John, il semble que l'octroi de l'autorisation java.security.AllPermission; fonctionne mais c'est toujours la seule façon de le faire fonctionner. J'ai fait imprimer l'applet de son codeBase et ça me semble bien. Très frustrant, mais au moins merci à vous, je sais que c'est lié à la sécurité et pas un problème étrange. – adilei
@John, je vais accepter cette réponse car c'est vrai - il est possible pour une applet d'ouvrir une socket à un hôte différent. Je vais poser une question de suivi si vous êtes intéressés à me suivre là-bas. À la vôtre, Adi. – adilei
Comment pouvez-vous "accorder par programme AllPermission"? Quel est le point d'avoir un gestionnaire de sécurité pour empêcher l'exécution de code malveillant si le code peut simplement s'accorder des autorisations pour faire ce qu'il veut? C'est même possible, ça ne devrait pas être! @John, si vous lisez ceci, pourriez-vous s'il vous plaît supprimer cette dernière puce pour empêcher d'autres personnes de suivre la mauvaise piste en essayant d'implémenter quelque chose que le standard Java empêche explicitement. Soit ça ou expliquer pourquoi je me trompe. Merci! –