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

Wildfly/JBoss Java Discussion :

Problème de configuration Realm


Sujet :

Wildfly/JBoss Java

  1. #1
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 199
    Points : 494
    Points
    494
    Par défaut Problème de configuration Realm
    Bonjour à tous,

    Je suis nouveau sur Jave EE et j'ai jusque là réussi à m'en sortir sans trop de problèmes avec Google. Mon application actuelle contient un tiers web avec 3 servlets appelant un tiers EJB constitué d'un @Stateless @Remote SessionBean applicatif qui encapsule des appels au service d'intégration.

    Ce service d'intégration est composé d'un @Stateless @Local SessionBean et de 2 @Entity dont la persistence est gérée par JPA. Je travaille dans un environnement MyEclipse, j'ai écris moi-même les fichiers de déploiement build.xml, j'utilise JBoxx 5.1.0 et la base de données Hypersonic qui est livrée d'office avec.

    Mon application est simple et fonctionne parfaitement, mes servlets me permettant d'appeler mon session bean applicatif et d'enregistrer des lignes dans la base de données. Voici mon fichier persistance.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <persistence-unit name="CurrencyManagement">
    		<description>Manages the persistence for currencies. It rely on Hypersonic database embedded in JBoss.</description>
    		<jta-data-source>java:DefaultDS</jta-data-source>
    		<class>ch.mobi.testejb.integration.entity.CurrencyEntity</class>
    		<class>ch.mobi.testejb.integration.entity.CurrencyRateEntity</class>
    </persistence-unit>
    Là-dessus, j'ai voulu ajouter une couche d'authentification pour protéger (pour le moment la totalité) des servlets. J'ai donc voulu définir des contraintes de sécurité dans mon web.xml de mon tiers web. Voici le résultat (j'ai enlevé ce qui concerne le mapping servlet qui n'est probablement pas intéressant) :

    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
     
    <security-constraint>
      <display-name>Security constraint for all servlets</display-name>
      <web-resource-collection>
       <web-resource-name>Protected area</web-resource-name>
       <url-pattern>/*</url-pattern>
      </web-resource-collection>
      <auth-constraint>
       <role-name>admin</role-name>
      </auth-constraint>
     </security-constraint>
     <login-config>
      <auth-method>FORM</auth-method>
      <realm-name>CurrencyManager</realm-name>
      <form-login-config>
       <form-login-page>/login.jsp</form-login-page>
       <form-error-page>/loginerror.jsp</form-error-page>
      </form-login-config>
     </login-config>
     <security-role>
      <role-name>admin</role-name>
     </security-role>
    Le code de mon JSP de login est standard :

    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
     
    <form action="j_security_check" method="post">
        	<table>
        		<tr>
        			<td>User name : </td>
        			<td><input type="text" name="j_username" /></td>
        		</tr>
        		<tr>
        			<td>Password : </td>
        			<td><input type="password" name="j_password" /></td>
        		</tr>
        		<tr>
        			<td>&nbsp;</td>
        			<td><input type="submit" value="connect" /></td>
        		</tr>
        	</table>
    </form>
    Forcément, à ce stade du mon développement, j'obtiens cette exception quand je tente de faire un login :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ERROR [UsersRolesLoginModule] Failed to load users/passwords/role files
    java.io.IOException: No properties file: users.properties or defaults: defaultUsers.properties found
    Ce qui me paraît tout à fait normal étant donné que j'ai pas encore configuré mon Realm pour aller chercher dans la base de données les informations sur les users.

    Je change donc mon server.xml du dossier deploy/jbossweb.sar de l'install JBoss en ajoutant ce code à l'intérieur de la balise <Host name="localhost"></host>:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <Realm className="org.apache.catalina.realm.DataSourceRealm" 
    		dataSourceName="DefaultDS"
    		userTable="users"
    		userRoleTable="user_roles"
    		userNameCol="user_name"
    		userCredCol="user_pass"
    		roleNameCol="role_name"
    />
    En relançant ma procédure de login, j'obtiens maintenant une autre exception :
    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
     
    ERROR [[localhost]] Exception performing authentication
    javax.naming.NameNotFoundException: Le Nom DefaultDS n'est pas lié à ce Contexte
    	at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
    	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
    	at org.apache.catalina.realm.DataSourceRealm.open(DataSourceRealm.java:403)
    	at org.apache.catalina.realm.DataSourceRealm.authenticate(DataSourceRealm.java:284)
    	at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:258)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:417)
    	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
    	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
    	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:619)
    J'ai essayé dans la config server.xml de placer "java: DefaultDS" similairement à la config persistence.xml de mon tiers EJB, le résultat est exactement le même : le DataSource DefaultDS n'est pas trouvé dans les bindings JNDI.

    J'ai été voir la liste des bindings JNDI dans le service=JNDIview de la console de management JMX, et cette ligne est pourtant bien présente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    java: Namespace
    +- DefaultDS (class: org.jboss.resource.adapter.jdbc.WrapperDataSource)
    Je n'arrive donc pas à comprendre pourquoi cette erreur survient, je me serais attendu à tout sauf à un problème de NamingException.

    Si vous avez une idée ou si vous savez à quel endroit de la configuration je dois aller regarder pour trouver le problèm, je suis preneur. Là ça fait déjà un peu trop d'heures que je suis sur le sujet

    Petite remarque, j'ai également testé de placer la balise <Realm> non pas pour le <Host> mais pour le <Engine> (un niveau au dessus), et l'erreur était encore plus bizarre. Je peux refaire la configuration pour sortir l'erreur si quelqu'un juge la chose intéressante. J'ai lu dans la doc que les Realms pouvaient être définis pour le serveur d'application entier (dans <Engine>), pour un hôte particulier (<Host>) ou encore pour un contexte particulier (<Context>, balise n'existant pas pour le moment, j'utilise le Host par défaut Localhost).

    Tout info est la bienvenue
    Always code as if the guy maintaining your application is a violent psychopath!
    Site personnel sur la saga Final Fantasy : http://www.final-fantasy.ch

  2. #2
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 199
    Points : 494
    Points
    494
    Par défaut
    Après quelques tests, j'ai effectué quelques changements dans mon code.

    Tout d'abord, j'ai enlevé la configuration spéciale du server.xml. En effet, c'est un peu pénible de redémarrer le serveur à chaque changement de configuration. Je suis donc revenu à la configuration standard.

    Par contre, j'ai lu ici :

    http://wiki.metawerx.net/wiki/Context.xml

    un exemple de configuration context.xml spécifique à un projet. J'ai donc créé un fichier context.xml et je l'ai placé dans /META-INF/context.xml comme précisé sur la page. Ce fichier 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
     
    <Context>
    	<Resource name="jdbc/hsdbDS" 
    		auth="Container" 
    		type="javax.sql.DataSource" 
    		username="USERNAME" password="PASSWORD" 
    		driverClassName="org.hsqldb.jdbcDriver" 
    		/>
     
    	<Realm className="org.apache.catalina.realm.DataSourceRealm" 
    			dataSourceName="jdbc/hsdbDS"
    			userTable="users"
    			userRoleTable="user_roles"
    			userNameCol="user_name"
    			userCredCol="user_pass"
    			roleNameCol="role_name"
    			localDataSource="true"
    		/>
    </Context>
    Lorsque je lance avec cette configuration, j'ai toujours l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.io.IOException: No properties file: users.properties or defaults: defaultUsers.properties found
    Comme si le fichier context.xml n'était pas pris en compte.

    Suite à une fausse manipulation, j'ai remarqué que le fichier context.xml était pris en compte quand je le plaçait dans WEB-INF et non dans META-INF (la doc de JBoss à http://docs.jboss.org/jbossweb/en/ht...g/context.html mentionne également que le fichier context.xml devrait se trouver dans META-INF et pas dans WEB-INF).

    En lançant avec context.xml dans le WEB-INF, j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.jboss.xb.binding.JBossXBException: Failed to parse source: Resource not found as a child of Context in unordered_sequence: Listener* Parameters* Valve* SessionCookie? Loader? Manager? Realm? attributes? InstanceListener* Resources?
    Comme si la balise XML "Resource" n'était pas valide à cet endroit de l'arborescence (emplacement que j'ai pourtant vu à de nombreux emplacement sur des exemples ainsi que dans la documentation Jboss).

    Une idée ?
    Always code as if the guy maintaining your application is a violent psychopath!
    Site personnel sur la saga Final Fantasy : http://www.final-fantasy.ch

  3. #3
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 199
    Points : 494
    Points
    494
    Par défaut
    Bon, je continue mes tests, toujours sans succès, mais les erreurs changent au fil des jours...

    Dans la JMX Console dans la rubrique JNDI View, j'ai cette information indiquant bien que mon defaultDS est configuré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Java: Namespace
    +- DefaultDS (class: org.jboss.resource.adapter.jdbc.WrapperDataSource)
    Voici le code de configuration du DataSource (hsqldb-ds.xml dans le répertoire deploy de mon server) :

    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
     
    <datasources>
       <local-tx-datasource>
          <!-- The jndi name of the DataSource, it is prefixed with java:/ -->
          <!-- Datasources are not available outside the virtual machine -->
          <jndi-name>DefaultDS</jndi-name>
     
          <connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}localDB</connection-url>
     
          <!-- The driver class -->
          <driver-class>org.hsqldb.jdbcDriver</driver-class>
     
          <!-- The login and password -->
          <user-name>##USERNAME##</user-name>
          <password>##PASSWORD##</password>
          <min-pool-size>5</min-pool-size>
          <max-pool-size>20</max-pool-size>
          <idle-timeout-minutes>0</idle-timeout-minutes>
          <security-domain>HsqlDbRealm</security-domain>
     
          <prepared-statement-cache-size>32</prepared-statement-cache-size>
     
          <metadata>
             <type-mapping>Hypersonic SQL</type-mapping>
          </metadata>
     
          <depends>jboss:service=Hypersonic,database=localDB</depends>
          <depends>jboss:service=Hypersonic</depends>
       </local-tx-datasource>
     
       <mbean code="org.jboss.jdbc.HypersonicDatabase" 
         name="jboss:service=Hypersonic,database=localDB">
         <attribute name="Database">localDB</attribute>
         <attribute name="InProcessMode">true</attribute>
       </mbean>
     
    </datasources>
    Configuration de mon context.xml dans /WEB-INF/ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
    	<Realm className="org.apache.catalina.realm.DataSourceRealm" 
    			dataSourceName="java:DefaultDS"
    			userTable="users"
    			userRoleTable="user_roles"
    			userNameCol="user_name"
    			userCredCol="user_pass"
    			roleNameCol="role_name"
    			localDataSource="true"
    		/>
    </Context>
    Et j'ai une Exception (lors de la tentative de login sur ma page JSP) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.naming.NameNotFoundException: Le Nom java:DefaultDS n'est pas lié à ce Contexte
    J'ai testé "DefaultDS", "javaefaultDS", "java:com/env/DefaultDS", quoi qu'il arrive l'exception est toujours pareille, mon DS n'est pas défini dans mon contexte.

    J'ai donc tenté d'ajouter une référence vers ce DS dans mon web.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      <resource-ref>
        <description>The default DS</description>
        <res-ref-name>DefaultDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
      </resource-ref>
    J'ai à nouveau testé à peu près tout ce qui est possible de mettre dans res-ref-name (javaefaultDS, DefaultDS, java:comp/env/DefaultDS entre de nombreux autres), et j'ai toujours cette exception (pendant le deployment cette fois) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.lang.RuntimeException: mapped-name is required for DefaultDS of deployment my.war
    Bon, sur ce une petite recherche sur le net me permet de tomber sur http://javahowto.blogspot.com/2009/1...ervlet-25.html. J'ai donc modifié comme suit mon web.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     <resource-ref>
      <description>The default DS</description>
      <res-ref-name>DefaultDS</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      <mapped-name>java:DefaultDS</mapped-name>
     </resource-ref>
    Le deployment se passe à nouveau correctement, mais je tombe à nouveau sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.naming.NameNotFoundException: Le Nom DefaultDS n'est pas lié à ce Contexte
    J'ai testé DefaultDS, javaefaultDS, jdbc/DefaultDS et java:comp/env/DefaultDS pour l'élément mapped-name, l'élément res-ref-name ainsi que le nom du Realm, mais rien n'y fait (bon, je n'exclus pas avoir oublié une des compinaisons, car toutes les possibilités de 3 éléments XML avec 4 possibilités de nom JNDI ça en fait déjà des masses à tester... mais j'en ai essayé des demi-douzaines ).

    J'ai encore vu sur qu'il existe un élément <jndi-name>, mais que cet élément n'est pas standard pour le web.xml mais placé dans sun-web.xml. Je ne sais pas trop comment utiliser ça, j'ai entendu parler d'un fichier de config jboss-web.xml, je l'ai testé comme suit dans /WEB-INF/:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <jboss-web>
    	<resource-ref>
    		<res-ref-name>DefaultDS</res-ref-name>
    		<res-type>javax.sql.DataSource</res-type>
    		<jndi-name>java:DefaultDS</jndi-name>
    	</resource-ref>
    </jboss-web>
    Mais je n'ai jamais vu le moindre changement de comportement avec ou sans le fichier jboss-web.xml.

    (je précise que je n'ai bien évidemment pas pu tester toutes les combinaisons de 4 noms JNDI dans les 5 éléments XML <res-ref-name>, <mapped-name>, <jndi-name> et <realm> des différents fichiers de config car là y a vraiment vraiment trop de possibilités...

    Plusieurs semaines sans solutions, je désespère un peu... des idées ?
    Always code as if the guy maintaining your application is a violent psychopath!
    Site personnel sur la saga Final Fantasy : http://www.final-fantasy.ch

  4. #4
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 199
    Points : 494
    Points
    494
    Par défaut
    Merci à rakym pour son message privé m'ayant permis de contourner ma tentative de configuration. Je n'ai pas réussi à configurer correctement les codes que j'ai postés plus haut, mais ça fonctionne en passant par une configuration différente.

    Je poste ici ma solution au cas ou ça pourrait aider une fois quelqu'un d'autre. Je dois dire que je me suis bien pris la tête et que probablement quelqu'un tombera sur ce post par une recherche google.

    Mon fichier WEB-INF/web.xml ne contient plus que (CurrencyManager étant le servlet que je cherche à progéter) :

    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
     
     <security-constraint>
      <display-name>Security constraint for Currency Manager</display-name>
      <web-resource-collection>
       <web-resource-name>Protected area</web-resource-name>
       <url-pattern>/servlet/CurrencyConverter</url-pattern>
      </web-resource-collection>
      <auth-constraint>
       <role-name>admin</role-name>
      </auth-constraint>
     </security-constraint>
     <login-config>
      <auth-method>FORM</auth-method>
      <realm-name>CurrencyManager</realm-name>
      <form-login-config>
       <form-login-page>/login.jsp</form-login-page>
       <form-error-page>/loginerror.jsp</form-error-page>
      </form-login-config>
     </login-config>
     <security-role>
      <role-name>admin</role-name>
     </security-role>
    Le fichier WEB-INF/jboss-web.xml contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <jboss-web>
    	<security-domain>java:/jaas/currencysecurity</security-domain>
    </jboss-web>
    Ce domaine de sécurité doit être défini dans la configuration du serveur JBoss le fichier conf/login-config.xml (à l'intérieur de la balise <policy> :

    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
     
    <application-policy name="currencysecurity"> 
        <authentication> 
            <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" 
                             flag="required"> 
                <module-option name="dsJndiName">java:/DefaultDS</module-option> 
                <module-option name="principalsQuery">   
                    select user_pass from users where user_name=? 
                </module-option> 
                <module-option name="rolesQuery"> 
                    select role_name,'Roles' from user_roles where user_name=? 
                </module-option> 
            </login-module> 
        </authentication> 
    </application-policy>
    Je me suis rapidement posé la question de savoir si il était possible de définir ce domaine de sécurité JAAS par un descripteur de déploiement intégré à mon archive WAR, celà ne semble par être le cas selon ce que j'ai pu lire ici :

    http://www.developpez.net/forums/d43...-lapplication/

    Voilà, j'espère vous éviter des jours entiers de prise de tête.

    (remarque additionnelle : de toute façon, la configuration d'un système de login par ce moyen est totalement naze... par exemple, si une personne se trompe de mot de passe, elle a un message "interdit" jusqu'à l'expiration de sa session, ce qui est vraiment moyen... Je conseille fortement de gérer la session à l'intérieur des servlets. Mais j'avais envie de découvrir cette solution built-in je n'avais pas envie d'abandonner avant d'avoir la solution )
    Always code as if the guy maintaining your application is a violent psychopath!
    Site personnel sur la saga Final Fantasy : http://www.final-fantasy.ch

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

Discussions similaires

  1. [Install]Problème de configuration d'éclipse
    Par Jean Claude90 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 26/02/2005, 17h33
  2. [Log4j]petit problème de configuration
    Par mikey_ufc dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 09/01/2005, 23h32
  3. [Tomcat 5 + Eclipse] Problème de configuration
    Par seb55555 dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 26/10/2004, 15h20
  4. [EJB] Problème avec configuration jonas
    Par SteelBox dans le forum JBuilder
    Réponses: 30
    Dernier message: 11/03/2004, 21h30
  5. Problème de configuration
    Par lsdInside dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 09/10/2003, 12h34

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