2010-04-10 6 views
9

Je travaille sur un projet d'intelligence artificielle qui est un jeu de logique et vise deux utilisateurs se connectant au serveur sur le réseau qui agit comme un administrateur et commence à jouer un par un. Pour créer des connexions, j'ai un code serveur qui écoute sur localhost: 8000 et qui attribue des valeurs d'équipe aux clients dès leur arrivée. Après la connexion, les clients effectuent leur déplacement sous le contrôle d'Admin.Où placer le fichier de règles de l'applet Java?

La question est que lorsque je tente de mettre mon code pour travailler dans le navigateur, il échoue avec l'erreur suivante:

java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:8000 connect,resolve) 

Même si j'ai créé ma propre politique, d'abord accorder uniquement l'autorisation d'accès Socket à le code de base de mon dossier de projet (file:///home/xxx/projects/-), après cela n'a pas fonctionné j'ai accordé toutes les autorisations de tous codebase. J'ai essayé de placer mon fichier de politique à la fois dans le répertoire de base et dans le même répertoire où réside mon code d'applet.

Appréciez tous les conseils, merci.

+0

Lorsque j'essaie d'exécuter mon code client après avoir démarré le serveur depuis la console comme suit, je suis capable de faire reconnaître mon propre fichier de politique qui réside dans mon répertoire personnel: appletviewer -J-Djava.security.policy = mypolicy.policy file: ///home/xxx/NetBeansProjects/project/src/index.html Mais lorsque j'essaie de lancer à partir de l'IDE, cela échoue: s – makdere

+0

la signature de l'applet pot (s) peut être un peu plus facile à gérer. Vous évite d'avoir à installer un fichier de stratégie sur chaque boîte que vous souhaitez utiliser. – objects

Répondre

11

par défaut, je pense qu'il recherche un fichier nommé .java.policy dans votre maison répertoire

Vous pouvez vérifier le fichier /lib/security/java.security pour voir où il se trouve. vérifier les clés nommées policy.url.n

+1

Renommer mon propre fichier de politique créé en .java.policy après avoir vérifié /lib/security/java.security afin de savoir où java recherche le fichier de politique, cela a fonctionné. Merci tous les 1 pour les conseils. – makdere

+0

si votre problème est résolu alors s'il vous plaît cliquez sur la coche à côté du commentaire (sur la gauche) qui vous a aidé. – objects

+0

merci mon pote, contente que ça t'ait aidé – objects

0

Placez le fichier de stratégie à l'emplacement de JRE.

Par exemple, mon fichier de stratégie se trouve dans C: \ Program Files \ Java \ jre1.6.0_01 \ lib \ security

0

Je suggère fortement de respecter la politique de même origine. Les implications en matière de sécurité ne sont pas nécessairement évidentes dans le meilleur des cas. En outre, une applet avec des autorisations standard a une meilleure facilité d'utilisation et devrait être plus facile à maintenir.

0

Si vous accordez une autorisation à un JAR (base de code) spécifique, cela ne fonctionne que si la pile d'exécution entière du début du thread à l'appel de la méthode se trouve dans ce domaine de base de code/protection. Si votre méthode est une bibliothèque et que vous êtes certain d'accéder à l'opération en toute sécurité, vous pouvez utiliser un bloc Priveledged, qui s'assure que la partie de la pile qui appelle votre bloc n'est pas prise en compte dans le calcul d'accès.

Privileged Block, comme décrit ici:

http://docs.oracle.com/javase/6/docs/technotes/guides/security/doprivileged.html

Salutations Bernd

2

Vous pouvez définir l'emplacement du fichier de politique de sécurité en utilisant cette option de ligne de commande

-Djava.security.policy=policyfilepath 

avec la commande java.

Ou vous pouvez même définir cette propriété en utilisant la procédure System.setProperty().

+0

Comment cela s'applique-t-il à une applet? De plus, je doute que la définition de la propriété système après le démarrage de la JVM est effective. – davmac