Comment puis-je accorder un site applet AllPermission privilège?
J'aimerais préciser certains applets de courir avec java.security.AllPermission
sur mon ordinateur (pour le débogage et les tests de sécurité). Cependant, je ne veux pas activer tous applets que je cours pour avoir cette autorisation. Ainsi, l'édition de mon utilisateur Java politique de fichier (dont j'ai assuré est le bon fichier de stratégie par le biais de tests), j'ai essayer de mettre cette valeur:
grant codeBase "http://host_where_applet_lives/-" {
permission java.security.AllPermission;
};
Cette valeur échoue lorsque l'applet essaie de faire quelque chose de puissant (créer un nouveau Fil de discussion, dans mon cas). Cependant, quand j'ai mis la valeur suivante:
grant {
permission java.security.AllPermission;
};
L'applet est en mesure d'effectuer la puissante opération. La seule différence est l'absence d'un codeBase
attribut.
Une réponse à une question similaire posée ici [1], semble suggérer (mais ne jamais montrer ou prouver) que AccessController.doPrivileged()
appels peuvent être nécessaires. Pour moi, cela sonne faux, comme je n'ai pas besoin que l'appel quand je accorder les autorisations pour tous les applets (le deuxième exemple que j'ai montré). Même si c'est une solution, qui jonchent les applets, je lance avec AccessController.doPrivileged()
appels n'est pas facile ni forcément possible. Pour couronner le tout, mes tests montrent que cela ne fonctionne tout simplement pas de toute façon. Mais je suis heureux d'entendre plus d'idées autour d'elle.
[1] Ne pouvez pas obtenir AllPermission configuré pour l'intranet de l'applet. Quelqu'un peut-il aider?
- Le
doPrivileged
dans ce commentaire fait référence à une applet d'être appelé par le code JavaScript via LiveConnect. Être extrêmement prudent avecdoPrivileged
, et avec le code de confiance en général. - Oui, mais il indique que doPrivileged() ne -rien - spécial lors de l'exécution sous AllPermission, dont j'affirme qu'il ne devrait pas.
Vous devez vous connecter pour publier un commentaire.
La réponse à la question similaire vous avez référencé suggère que l'appel de l'applet Java de code de JavaScript peut conduire à une
SecurityException
parce que leAccessController
va faire un pile d'inspection et échouer en raison de la non fiables JavaScript. J'ai essayé le code et bien sûr, Firefox de ne pas exécuter l'applet appelé par JavaScript sansdoPrivileged()
appel, mais Safari (au moins sur Mac OSX).Si vous appelez votre applet à partir de JavaScript, vous pouvez essayer d'utiliser le
Applet.paint()
plutôt la méthode à invoquer automatiquement votre applet. Ou, vous pouvez utiliser ledoPrivileged()
méthode de court-circuit de la pile d'inspection, et de vous donner le privilège dont vous avez besoin. Bien sûr, tout code non fiable serait en mesure d'appeler dans votre code privilégié.