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

Struts 1 Java Discussion :

[ JAAS ][ Struts ] Formulaire Authentification


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Par défaut [ JAAS ][ Struts ] Formulaire Authentification
    Bonjour a tous,

    J'essai de mettre en place un systeme d'authentification a mon application J2EE. Mon architecture est la suivante : JBoss 4, MySQL et Struts. Dans mon formulaire de login, j'utilise l'action j_security_check. J'ai configurer ces differents fichier : login-config.xml, web.xml, jboss-web.xml. Je ne sais pas comment faire mon fichier LoginModule qui doit extends UsernamePasswordLoginModule ou DatabaseServerLoginModule.

    Est ce que quelqu'un pourrait m'aider...

    Merci,
    Cedric.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Par défaut
    Je crois qu'il faut que ma classe extends DatabaseServerLoginModule (org.jboss.security.auth.spi.DatabaseServerLoginModule). Le probleme deja, c'est que je n'arrive pas a l'inclure. Je n'ai pas de org.jboss.
    Je ne vois pas comment faire?

    Merci

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Par défaut
    Ta stratégie d'identification est elle complètement établie ?
    Si oui, n'existe t'il pas de LoginModule correspondant à ton choix dans le serveur d'application cible ?
    Si oui, tu n'as que de la configuration à faire.

    Sur quelle modèle désire tu réaliser ton identification ? Sur un couple login/password d'une base de données existante ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Par défaut
    Je suis parti avec une base de donnees MySQL. J'ai donc creer une table client comportant un id, nom, passwd, mail et le role. Je ne vois donc ps comment faire.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Par défaut
    En règle générale, un utilisateur peut avoir plusieurs rôles aussi, il te faudras deux tables.

    JBoss intègre en standard un LoginModule qui repose sur ce modèle, le DatabaseServerLoginModule: Toutes les informations ici-> http://wiki.jboss.org/wiki/Wiki.jsp?page=DatabaseServerLoginModule

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Par défaut
    Je suis deja alle sur ce site, mais je ne vois pas trop comment faire pour l'appliquer a mon cas. Je ne vois pas trop comment faire ds ma classe LoginModule... J'ai cherche, mais j'ai pas trouve grand chose. C'est pour cela que j'aurai besoin de votre aide...

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Par défaut
    Tu n'as pas à "faire" cette classe, elle existe.
    Il te faut juste configurer ce LoginModule dans JBoss pour qu'il accède à ta base et à tes tables, rien de plus.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Par défaut
    Ok je vois a peu pres comment ca marche sauf qq petit point...
    • Je ne vois pas trop pkoi il y a un roleid et un roles a la secondes requete
    • Est-il possible d'avoir une seule table qui regroupe toutes ces infos?

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Par défaut
    Techniquement oui, conceptuellement, non!
    Un utilisateur peu avoir plusieurs rôles tu as donc une relation 1..n

    Le RoleID est là pour simuler la présence d'un groupe de rôle rien de plus

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Par défaut
    Donc bon j'ai essaye. Voici ma configuration :
    table client(clientID, clientNom, clientPasswd, clientMail)
    table role(clientMail, role, roleGroup)

    Ensuite voici mon fichier login-config.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!-- Security domain for JBossMQ -->
        <application-policy name = "jbossmq">
           <authentication>
              <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule"
                 flag = "required">
                 <module-option name = "unauthenticatedIdentity">guest</module-option>
                 <module-option name = "dsJndiName">java:/mp3sil</module-option>
                 <module-option name = "principalsQuery">SELECT clientPasswd FROM client WHERE clientMail=?</module-option>
                 <module-option name = "rolesQuery">SELECT role, roleGroup FROM role WHERE clientMail=?</module-option>
              </login-module>
           </authentication>
        </application-policy>
    Voici le formulaire de ma page Login.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <form action="j_security_check" method="post">
          <table border="0">
            <tr>
              <td>Login: <input type="text" name="j_username" class="txt" /></td>
            </tr>
            <tr>
              <td>Password: <input type="password" name="j_password" class="txt" /></td>
            </tr>
            <tr>
              <td align="center"><html:submit /></td>
            </tr>
          </table>
        </form>

    J'obtiens l'erreur suivante en voulant me logger:
    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
    14:33:10,906 ERROR [UsersRolesLoginModule] Failed to load users/passwords/role files
    java.io.IOException: No properties file: users.properties or defaults: defaultUsers.properties found
    	at org.jboss.security.auth.spi.Util.loadProperties(Util.java:268)
    	at org.jboss.security.auth.spi.UsersRolesLoginModule.loadUsers(UsersRolesLoginModule.java:171)
    	at org.jboss.security.auth.spi.UsersRolesLoginModule.createUsers(UsersRolesLoginModule.java:185)
    	at org.jboss.security.auth.spi.UsersRolesLoginModule.initialize(UsersRolesLoginModule.java:112)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:585)
    	at javax.security.auth.login.LoginContext.invoke(LoginContext.java:756)
    	at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
    	at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
    	at javax.security.auth.login.LoginContext.login(LoginContext.java:579)
    	at org.jboss.security.plugins.JaasSecurityManager.defaultLogin(JaasSecurityManager.java:572)
    	at org.jboss.security.plugins.JaasSecurityManager.authenticate(JaasSecurityManager.java:506)
    	at org.jboss.security.plugins.JaasSecurityManager.isValid(JaasSecurityManager.java:315)
    	at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.authenticate(JBossSecurityMgrRealm.java:230)
    	at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:256)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:391)
    	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    	at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
    	at java.lang.Thread.run(Thread.java:595)
    Est ce que tu verrais d'ou cela peut venir?

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Par défaut
    Tu as mis à jour ton jboss.web ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-web>
       <security-domain>java:/jaas/jbossmq</security-domain>
    </jboss-web>

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Par défaut
    Desole, en fait j'ai eu un petit souci avec ma base de donnees.
    Voila maintenant cela a l'air de fonctionner mais je n'arrive tout de meme pas a me connecter a mon application. J'ai le message "Can't log to Mp3sil". Je pense que cela vient d donnees de ma table? Voici en gros ce que j'ai mis ds les tables :
    • client (1, Cirdec, cirdec, cirdec@cirdec.fr)
    • role(cirdec@cirdec.fr, client, client)

    Je ne suis pas sur de moi...

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Par défaut
    Bon voila j'ai enfin reussi... C'etait un probleme dans le nom de mes tables SQL.
    Je te remercie beaucoup pour ton aide tres utile. Par contre, j'ai encore quelque question de fonctionnement...
    • Une fois logger sur le site, comment faut-il faire pour pouvoir se delogger (pour ainsi changer d'utilisateur) ?
    • Est'il possible d'avoir des passwords cryptes en md5 par exemple ?
    • Est'il possible de recuperer le nom du login pour ainsi afficher la personne connecte sur le site (ou meme m'en servir pour differente requetes) ?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 34
    Par défaut
    Salut Cedric

    Je suis en train d'essayer moi aussi j_security_check et pour l'instant j'ai une erreur etrange. Voila ma config:

    login-config.xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <application-policy name = "jbossmq">
           <authentication>
              <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule"
                 flag = "required">
                 <module-option name = "unauthenticatedIdentity">guest</module-option>
                 <module-option name = "dsJndiName">java:/autoWorkDS</module-option>
                 <module-option name = "principalsQuery">SELECT password FROM users WHERE username=?</module-option>
                 <module-option name = "rolesQuery">SELECT userRoles, roleGroupe FROM userroles WHERE username=?</module-option>
              </login-module>
           </authentication>
        </application-policy>
    jboss-web.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <jboss-web>
       <security-domain>java:/jaas/jbossmq</security-domain>
    </jboss-web>
    et web.xml:

    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
    <security-constraint>
         <web-resource-collection>
           <web-resource-name>HtmlAdaptor</web-resource-name>
           <description> An example security config that only allows users with
                         the role JBossAdmin to access the HTML JMX console web
                         application
           </description>
           <url-pattern>/Ecran*</url-pattern>
           <http-method>GET</http-method>
           <http-method>POST</http-method>
         </web-resource-collection>
         <auth-constraint>
             <role-name>admin</role-name>
         </auth-constraint>
       </security-constraint>
     
       <login-config>
          <auth-method>FORM</auth-method>
          <form-login-config>
             <form-login-page>/login.jsp</form-login-page>
             <form-error-page>/loginErreur.jsp</form-error-page>
          </form-login-config>
       </login-config>
     
       <security-role>
          <role-name>admin</role-name>
       </security-role>
    et quand je me loggue dans cette page:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <form method="POST" name="loginForm" action="<%=response.encodeURL("j_security_check")%>">
      <input type="text" name="j_username"/></div>
      <input type="password" name="j_password"/>
      <input type="submit" value='VALIDER'/>
      <input type="reset" value='RAFRAICHIR'/>
    </form>
    voila l'exception que j'ai:

    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
    [DatabaseServerLoginModule] SQL failure
    java.sql.SQLException: Column Index out of range, 2 > 1. 
    	at com.mysql.jdbc.ResultSet.checkColumnBounds(ResultSet.java:657)
    	at com.mysql.jdbc.ResultSet.getNativeString(ResultSet.java:4001)
    	at com.mysql.jdbc.ResultSet.getStringInternal(ResultSet.java:5153)
    	at com.mysql.jdbc.ResultSet.getString(ResultSet.java:4999)
    	at org.jboss.resource.adapter.jdbc.WrappedResultSet.getString(WrappedResultSet.java:400)
    	at org.jboss.security.auth.spi.Util.getRoleSets(Util.java:142)
    	at org.jboss.security.auth.spi.DatabaseServerLoginModule.getRoleSets(DatabaseServerLoginModule.java:166)
    	at org.jboss.security.auth.spi.AbstractServerLoginModule.commit(AbstractServerLoginModule.java:187)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:585)
    	at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)
    	at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
    	at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
    	at javax.security.auth.login.LoginContext.login(LoginContext.java:580)
    	at org.jboss.security.plugins.JaasSecurityManager.defaultLogin(JaasSecurityManager.java:483)
    	at org.jboss.security.plugins.JaasSecurityManager.authenticate(JaasSecurityManager.java:425)
    	at org.jboss.security.plugins.JaasSecurityManager.isValid(JaasSecurityManager.java:251)
    	at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.authenticate(JBossSecurityMgrRealm.java:230)
    	at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:256)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:391)
    	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    	at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
    	at java.lang.Thread.run(Thread.java:595)
    C assez etrange sachant que mes bases sont les suivantes:

    users(username, password, utilID)
    userroles(username, userRole, roleGroupe)

    ... Voila si quelqu'un peut m'aider...

  15. #15
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Par défaut
    • Une fois logger sur le site, comment faut-il faire pour pouvoir se delogger (pour ainsi changer d'utilisateur) ?
    • Est'il possible d'avoir des passwords cryptes en md5 par exemple ?
    • Est'il possible de recuperer le nom du login pour ainsi afficher la personne connecte sur le site (ou meme m'en servir pour differente requetes) ?


    • Coupe le navigateur (tous avec Firefox)
    • Oui, tu enregistre le password en MD5 dans ta base d'une part et tu le crypte en javascript dans ta page avant le login d'autre part.
    • Oui, avec la méthode getUserPrincipal() de la classe HttpServletRequest

Discussions similaires

  1. [JAAS][Struts] Authentification
    Par jmartell dans le forum Struts 1
    Réponses: 6
    Dernier message: 06/02/2006, 10h38
  2. [JAAS]Module d'authentification
    Par yanis97 dans le forum Sécurité
    Réponses: 3
    Dernier message: 10/07/2005, 19h20
  3. Réponses: 7
    Dernier message: 16/03/2005, 12h35
  4. [ Struts ] Formulaire : édition
    Par lr dans le forum Struts 1
    Réponses: 4
    Dernier message: 24/02/2005, 16h19
  5. [struts]Formulaire dynamique
    Par GreenJay dans le forum Struts 1
    Réponses: 8
    Dernier message: 28/05/2004, 16h35

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