2010-09-09 2 views
0

Je rencontre des problèmes pour appliquer les stratégies de sécurité RMI. J'ai un fichier .policy à la fois sur le serveur et sur le client, chacun d'entre eux exécutant un SecurityManager.Problème lors de l'utilisation de la stratégie de sécurité RMI

Lorsque j'essaie d'exécuter le client, son échec. Mon dossier de politique accorde tout l'atm. Heres le contenu:

grant { permission java.security.AllPermission }; 

J'ai le fichier client.policy dans le répertoire racine de mon fichier JAR (j'ai essayé en cours d'exécution avec le fichier de stratégie en dehors du pot trop). Ensuite, je lance le client avec ceci:

java -jar PagePlanner.jar -Djava.security.policy=client.policy -Djava.rmi.codebase=http://192.168.0.88:2077/home/me/NetbeansProjects/PageServer/dist/PageServer.jar -Djava.security.debug=access 

Spécifier mon fichier de stratégie et le chemin d'accès à ma base de code. Je ne suis pas sûr si l'un ou l'autre est correct. J'ai aussi essayé de régler le commutateur de débogage comme je l'ai lu quelque part il devrait me donner des informations supplémentaires sur ce qui se passe mal, mais il ne semble pas faire un difference.Heres la sortie quand je lance le client:

Exception in thread "main" java.security.AccessControlException: access denied (java.awt.AWTPermission setWindowAlwaysOnTop) 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323) 
    at java.security.AccessController.checkPermission(AccessController.java:546) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) 
    at java.awt.Window.setAlwaysOnTop(Window.java:2038) 
    at gui.LoginForm.<init>(LoginForm.java:59) 
    at main.Main.main(Main.java:21) 

D'où point que le client se bloque. Des idées de ce que je fais mal ici? La configuration de la stratégie sur le serveur est à peu près la même. Je peux poster les détails si cela aide.

Cheers.

Répondre

0

Exécutez le client avec -Djava.security.debug = accès, échec. Le plus probablement votre fichier .policy n'est pas trouvé.

Vous n'avez pas besoin de définir la base de code sur le client à moins que le client n'ait ses propres implémentations de classes/interfaces abstraites et que le serveur ne les connaisse pas. La base de code est normalement définie uniquement sur le serveur, afin d'annoter les classes téléchargées sur le client et le Registre.

+0

Pour une raison quelconque-Djava.security.debug = access, l'échec ne me donnait aucune sortie. Je ne sais pas pourquoi, à la fin, j'ai modifié le fichier de stratégie à l'échelle du système et j'ai abandonné les commutateurs côté client pour le moment. Ensuite, j'ai rencontré plusieurs autres problèmes auxquels vous semblez déjà avoir répondu sur d'autres sites - donc merci pour cela :) –

+0

EJP a raison sur les valeurs du paramètre java.security.debug, la syntaxe est cependant légèrement différente. Essayez-le comme ceci: -Djava.security.debug = "accès, échec" – Florin

+0

@Florin: Je n'ai jamais eu à utiliser ces citations. Ce serait seulement un problème avec un processeur de commande (shell) qui séparait les arguments à la virgule. Je n'en ai pas utilisé depuis environ 32 ans ;-) – EJP

Questions connexes