IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Applets Java Discussion :

java.security.AccessControlException: access denied (java.net.SocketPermission ..)


Sujet :

Applets Java

  1. #1
    Membre régulier Avatar de Iori Yagami
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 107
    Points : 88
    Points
    88
    Par défaut java.security.AccessControlException: access denied (java.net.SocketPermission ..)
    Salut tout le monde.
    Je fais un projet s'exécutant sur une applet java à partir d'un simple fichier HTML. Le problème est que lorsque je demande d'accéder à l'applet, je reçois l'exception suivante sur la console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:19387 connect,resolve) 
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    	at java.security.AccessController.checkPermission(Unknown Source)
    	at java.lang.SecurityManager.checkPermission(Unknown Source)
    	at java.lang.SecurityManager.checkConnect(Unknown Source)
    	at sun.plugin2.applet.Applet2SecurityManager.checkConnect(Unknown Source)
    	at java.net.Socket.connect(Unknown Source)
    	at java.net.Socket.connect(Unknown Source)
    	at java.net.Socket.<init>(Unknown Source)
    	at java.net.Socket.<init>(Unknown Source)
    	at org.jogre.client.awt.ConnectionPanel.connect(ConnectionPanel.java:316)
    	at org.jogre.client.awt.ConnectionPanel.<init>(ConnectionPanel.java:184)
    	at org.jogre.client.awt.JogreClientApplet.init(JogreClientApplet.java:116)
    	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    Je crois qu'il s'agit de modifier le fichier .policy, mais je ne sais pas comment, et surtout comment l'inclure dans mon projet, connaissant que je génére je .JAR à l'aide de ANT.
    Merci de m'aider

  2. #2
    Membre éprouvé
    Avatar de kmdkaci
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 560
    Points : 950
    Points
    950
    Par défaut java.security.AccessControlException: access denied (java.net.SocketPermission ..)
    Bonjour,
    Que fais ton Applet ? Est ce qu'elle tente d'accéder au poste client ?

    Comment invoques-tu ton Applet dans ta page HTML ?

    Merci

  3. #3
    Membre régulier Avatar de Iori Yagami
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 107
    Points : 88
    Points
    88
    Par défaut
    Salut kmdkaci,

    En fait je suis en train de développer un jeu en ligne en utilisant l'API Jogre, que j'ai modifié. Ce qui est sure est que l'API, le jeu et tout marchait bien. Je n'ai fait aucune modification. Mais je crois que j'ai changé le JDK.
    Enfin, voici le fichier HTML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <html>
    <head>
    <title>Applet Tester</title>
    
    <script language="JavaScript">
    
    // for browsing by SEARCH.
    function openAppletFrame () {
        // Do some validation first
    	if (form.username.value == "")
    		alert ("Please supply a username");
    	else {
        	window.open('applet_test_frame.html','','resizable=yes, scrollbars=no, width=590,height=475');
        }
    }
    
    </script>
    
    </head>
    
    <body>
    
    <font size="4" face="Verdana" color="#005599">
      <b>Applet tester</b>
    </font>
    
    <form method="post" action="" name="form">
    <table cellpadding="3" cellspacing="1" border="0" bgcolor="#666666" width="400">
      <tr bgcolor="#005599">
        <td height="30" colspan="2" align="center">
          <font face="Verdana" size="2" color="#ffffff"><b>Connection Settings</b></font>
        </td>
      </tr>
      <tr bgcolor="#F9F9F9">
        <td height="30" width="30%">
          <font size="2" face="Verdana" color="#55AA55">
    		<b>Game</b>
    	  </font>
    	</td>
    	<td height="30">
    	  <select name="game">
    		<option value="Rami.jar,./jdom.jar,./dom4j.jar,../../api/jogre.jar,../../server/server.jar main.RamiClientApplet.class">Rami</option>
          </select>
        </td>
      </tr>
      <tr bgcolor="#F9F9F9">
        <td height="30" height="30" width="30%">
          <font size="2" face="Verdana" color="#55AA55">
    		<b>Username</b>
    	  </font>
    	</td>
    	<td height="30">
      	  <input type="text" name="username" size="10" maxlength="20">
        </td>
      </tr>
      <tr bgcolor="#F9F9F9">
        <td height="30" height="30" width="30%">
          <font size="2" face="Verdana" color="#55AA55">
    		<b>Password</b>
    	  </font>
    	</td>
    	<td height="30">
      	   <input type="password" name="password" size="10" maxlength="20" value="">
        </td>
      </tr>
      
      <tr bgcolor="#F9F9F9">
        <td height="30" colspan="2" align="center">
    		 <input type="button" name="Button" value="Connect" onclick="openAppletFrame()">
    	</td>
      </tr>
    </table>
    </form>
    </body>
    </body>
    le fichier en rouge est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <html>
    <head>
    <title>Applet Tester Frame</title>
    <script language="JavaScript">
     
    // Function for creating the applet tag
    function createAppletTag () {
     
    	// Read info from parent window
    	gameinfo   = opener.document.form.game.value.split(" ");
    	username   = opener.document.form.username.value;
    	password   = opener.document.form.password.value;
     
    	// Create applet HTML
    	appletHTML =
    		"<applet archive='" + gameinfo[0] + ",./lib/jdom.jar,./lib/dom4j.jar' " +
    		"        code='" + gameinfo[1] + "'" +
    		"        width='100%' height='100%'>" +
    		"    <param name='username'   value='" + username + "'>" +
    		"    <param name='password'   value='" + password + "'>" +
     
    		"</applet>";
     
    	// Assign to div and update title
    	document.getElementById('applettag').innerHTML = appletHTML;
    	document.title = "Applet Tester Frame connected as " + username;
    }
     
    window.onload = createAppletTag;
     
    </script>
     
    </head>
    <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
     
    <div id="applettag">Loading Applet</div>
     
    </body>
    </body>
    Si il y a quelque chose incompréhensible dites le moi.

  4. #4
    Membre éprouvé
    Avatar de kmdkaci
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 560
    Points : 950
    Points
    950
    Par défaut java.security.AccessControlException: access denied (java.net.SocketPermission ..)
    Re,
    Je pense que le problème ne se pose pas au niveau des ces appels à l'Applet, mais plutôt au niveau de l'Applet elle même. Je pense que tu essayes (ton Apllet) d'accéder dans un endroit où tu n'es pas autorisé.

  5. #5
    Membre régulier Avatar de Iori Yagami
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 107
    Points : 88
    Points
    88
    Par défaut
    Oui c'est vrai, mais je tiens à signaler que je travail en local, donc, j'ai pas de problème d'accès, mais c'est juste que je ne sais pas configurer mon applet pour qu'elle ait ces droits.
    Saviez vous comment y procéder?

    (excuz moi pr le mp :p )

  6. #6
    Membre éprouvé
    Avatar de kmdkaci
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 560
    Points : 950
    Points
    950
    Par défaut java.security.AccessControlException: access denied (java.net.SocketPermission ..)
    Re,
    Je m'en doutais....
    Il faut savoir qu'une applet ne peut pas accéder à un endroit sauf son origine... (là où elle est née).
    Sinon, il faut la signer et il faut que le client accepte le certificat en question,
    voici quelques liens qui parlent de ça : Lien1 et lien2. Je pense aussi que une simple recherche sur google avec mots clés comment signer Applet te permet d'obtenir des dizaines de tutos sur ça.

  7. #7
    Membre régulier Avatar de Iori Yagami
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 107
    Points : 88
    Points
    88
    Par défaut
    Merci bien. Je vais lire le doc. Je vais chercher comment configurer le fichier .policy, parce que je crois que c'est la solution.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    la signature, c'est la solution. Le fichier policy, c'est une modification locale et pas sous le controle de l'applet. Ou alors t'inclue le policy dans l'applet, mais alors faut la signer quand meme sinon le policy est pas pris en compte. Bref, au plus simple, tu crée un certificat bidon et tu signe.

  9. #9
    Membre régulier Avatar de Iori Yagami
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 107
    Points : 88
    Points
    88
    Par défaut
    la signature, c'est la solution.
    Et bien, c'est la solution mon ami! En fait, il s'agit pas de faire un fichier java.policy comme je le croyais, mais changer le fichier java.policy qui se trouve dans le JRE_PATH/Security/
    et y inclure la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    permission java.net.SocketPermission "*", "listen,connect,accept,resolve";
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    permission java.net.SocketPermission "localhost:1024-", "listen";
    Je sais que c'est vraiment la sécurité, mais ça marche très bien.
    Pour faire du bon boulot, je crois qu'il faut vraiment faire une signature, mais vu la complexité de cette solution par apport au problème que j'ai. je préfère changer le "java.policy"

  10. #10
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    pour donner la autorisation à toute chose (fichiers, connection...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grant{
    permission java.security.AllPermission;
    };

  11. #11
    Membre régulier Avatar de Iori Yagami
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 107
    Points : 88
    Points
    88
    Par défaut
    Oui mais c'est moins sure d'assurer toute sorte de permission. Je crois que la précision, est plus avantageuse non?

  12. #12
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    j'ai trouvé le meme problem lors que j'ai deployer mon application dans un réseau local(LAN) au niveau de client.et j'arrive pas a localiser le problem

    si le problem se trouve au niveau de java.policy de client ou serveur?

    que vous disé si on modifier le fichier .policy au niveau de serveur.comme le cas de TOMCAT.Policy?

    merci

  13. #13
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    bonjour
    D'apres mon experience, j'avais le même probleme et j'ai procédé comme suite:

    solution 1 :
    dans le fichier %java_home%\lib\security\java.policy dans les poste client, on ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grant{
    permission java.security.AllPermission;
    };
    solution 2 :
    1/creer le fichier c:\applet.policy(par exemple) mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grant{
    permission java.security.AllPermission;
    };
    2/puis executer la commande soit:
    A/sous MSDOS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\j2sdk1.4.2_11\bin\appletviewer.exe -J-Djava.security.policy=c:\applet.policy  http://172.172.172.172:8080/pages/Applet.html
    B/ou bien sous HTML via JAVASCRIPT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <script language=javascript>
    function run(file) { 
    var ws = new ActiveXObject("WScript.Shell"); 
    try{ 
    ws.run(file); 
    } catch (Exception){ 
    alert ("file not found"); 
    } 
    } 
    </script></head><body>
    <form>
    <input type=button value="Ouvrir Applet" 
    onclick='run("C:\\j2sdk1.4.2_11\\bin\\appletviewer.exe -J-Djava.security.policy=c:\applet.policy  http://172.172.172.172:8080/pages/Applet.html")'/>
    </form></body></html>

  14. #14
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    merci pour votre reponse

    le problem c'est de trouver une solution centralisé chez le serveur,car c'est pas pratique de configurer a chaque client un fichier .policy.

    a mon coté j'ai essyé de modifer le fichier catalina.policy de tomcat.pour permetre au client d'appler l'applet.mais l'erreur perssiste encore.

    help me plz?

  15. #15
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Si tu veux faire ca uniquement coté serveur, faut signer l'applet, c'est tout. Quand a la solution 3 proposée par boussafi, je l'éviterais au plus Démarrer un activx pour lancer une applet....... C'est un peu contre nature et contre productif. Et le catalina.policy détermine uniquement les policies du serveur, rien à voir avec la jvm du client.

  16. #16
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Petite question, on est bien d'accord que si on ajoute dans le fichier %java_home%\lib\security\java.policy sur les postes client

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    grant{permission java.security.AllPermission;};
    Et que l'on va sur un site possédant une applet mal intentionnée, elle aura tous les droits ?

    de meme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    permission java.net.SocketPermission "*", "listen,connect,accept,resolve";
    permettrait à une applet de scruter un réseau local depuis le poste client ?

    si oui ce ne sont donc que des solutions le temps de développer rapidement, mais pour une mise en production il faudra bien signer l'applet...

  17. #17
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    oui. A ceci prêt que, pour le deuxième cas, ca permet non seulement de scruter le réseau local, mais aussi de transformer la machine temporairement en zombie

    La signature, c'est pas vraiment handicapant pour le développement, tu peux utiliser un certificat autosigné. Ca n'a aucune valeur d'un point de vue sécuritaire, mais ca suffit à la jvm.

  18. #18
    Membre régulier
    Homme Profil pro
    Ingénieur de projets
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur de projets
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Points : 97
    Points
    97
    Par défaut
    Bonjour,


    Je travaille avec NetBeans, et je ne sais pas où est ce que je peux écrire les lignes de commande afin de créer mon auto-certificat.

    Mon objectif est de récupérer en FTP sur un serveur un fichier binaire et de traiter les données.


    Si quelqu'un a une petite idée.

    Cordialement,

    MustOne


    ps: je suis totalement nouveau dans la programmation java, merci de votre indulgence

  19. #19
    Membre averti Avatar de ZeRevo
    Inscrit en
    Avril 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2007
    Messages : 302
    Points : 343
    Points
    343
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Si tu veux faire ca uniquement coté serveur, faut signer l'applet, c'est tout. Quand a la solution 3 proposée par boussafi, je l'éviterais au plus Démarrer un activx pour lancer une applet....... C'est un peu contre nature et contre productif. Et le catalina.policy détermine uniquement les policies du serveur, rien à voir avec la jvm du client.
    Merci de l'info j'étais parti sur la mauvaise piste.
    Pour signer une applet, dans le cadre du développement vous pouvez suivre cette procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    keytool.exe n-genkey -alias mon_alias
    jarsigner.exe -signedjar mon_applet.signed.jar mon_applet.jar mon_alias

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/04/2011, 17h48
  2. java.security.AccessControlException: access denied
    Par nezdeboeuf62 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 28/05/2009, 12h18
  3. java.security.AccessControlException: access denied
    Par mcmazigh dans le forum Applets
    Réponses: 1
    Dernier message: 25/08/2008, 17h11
  4. java.security.AccessControlException: access denied
    Par ludonantes dans le forum Applets
    Réponses: 10
    Dernier message: 28/03/2006, 17h44
  5. Réponses: 2
    Dernier message: 27/03/2006, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo