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

Sécurité Java Discussion :

Problème authentification jdbcRealm GlassFish


Sujet :

Sécurité Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 227
    Points : 109
    Points
    109
    Par défaut Problème authentification jdbcRealm GlassFish
    bonjour à tous,

    J'ai un souci avec mon realm que j'ai configuré comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <auth-realm name="realm-netescape" classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm">
                        <property description="null" name="user-name-column" value="identifiant"></property>
                        <property name="password-column" value="motdepasse"></property>
                        <property description="null" name="group-name-column" value="nom"></property>
                        <property description="null" name="group-table" value="groupe"></property>
                        <property name="user-table" value="utilisateur"></property>
                        <property name="datasource-jndi" value="jdbc/netescape"></property>
                        <property description="null" name="jaas-context" value="jdbcRealm"></property>
                    </auth-realm>
    le script de la base de données pour les tables groupe et client et 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
     
     
    CREATE TABLE groupe
    (
      groupe_id bigint NOT NULL,
      description character varying(255),
      nom character varying(255),
      CONSTRAINT groupe_pkey PRIMARY KEY (groupe_id)
    )
     
     
    CREATE TABLE utilisateur
    (
      personne_id bigint NOT NULL,
      email character varying(255),
      fax character varying(255),
      gsm character varying(255),
      nom character varying(255),
      prenom character varying(255),
      telephone character varying(255),
      identifiant character varying(255),
      motdepasse character varying(255),
      photo bytea,
      groupe_id bigint,
      CONSTRAINT utilisateur_pkey PRIMARY KEY (personne_id),
      CONSTRAINT fk407fdb6311616197 FOREIGN KEY (groupe_id)
          REFERENCES groupe (groupe_id) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION
    )
    Mon formulaire est tout aussi simple
    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
     
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
    <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <title>Authentification</title>
        </head>
        <body> 
            <form method="POST" action="j_security_check">
                <input type="text" name="j_username">
                <input type="password" name="j_password">
                <input type="submit" value="login"/>
            </form>  
        </body>
    </html>
    Et voici l'erreur que me retourne le serveur.
    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
     
    GRAVE: jdbcrealm.invaliduserreason
    ATTENTION: WEB9102: Web Login Failed: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Security Exception
    ATTENTION: Exception
    com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Security Exception
    	at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:394)
    	at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:240)
    	at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:153)
    	at com.sun.web.security.RealmAdapter.authenticate(RealmAdapter.java:483)
    	at com.sun.web.security.RealmAdapter.authenticate(RealmAdapter.java:425)
    	at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:269)
    	at org.apache.catalina.authenticator.AuthenticatorBase.processSecurityCheck(AuthenticatorBase.java:909)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:546)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:623)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
    	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    	at java.lang.Thread.run(Thread.java:680)
    Caused by: javax.security.auth.login.LoginException: Security Exception
    	at javax.security.auth.login.LoginContext.invoke(LoginContext.java:856)
    	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 com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:382)
    	... 29 more
    Caused by: java.lang.SecurityException
    	at javax.security.auth.login.LoginContext.invoke(LoginContext.java:857)
    	... 35 more
    Quelqu'un aurait-il une idée parce que franchement je ne vois pas de quoi, il s'agit et cela fait un moment que je galère.
    Alors merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 179
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    je déterre le topic car je suis également dans la même situation. J'ai crée une webapp que je souhaite sécuriser avec un realm jdbc sous Glassfish. Voici le contenu de mes différents fichiers :

    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
     
    <security-constraint>
    	<web-resource-collection>
    		<web-resource-name>all</web-resource-name>
    		<url-pattern>/*</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>
     
    <security-role>
    	<role-name>admin</role-name>
    </security-role>
     
    <security-role>
    	<role-name>user</role-name>
    </security-role>
     
    <login-config>
    	<auth-method>BASIC</auth-method>
    	<realm-name>testRealm</realm-name>		
    </login-config>
    glassfish-web.xml ou sun-web.xml (j'ai testé les 2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <security-role-mapping>
    	<role-name>admin</role-name>
    	<group-name>administrateur</group-name>
    </security-role-mapping>
     
    <security-role-mapping>
    	<role-name>user</role-name>
    	<group-name>user</group-name>		
    </security-role-mapping>
    Mes tables MySQL :
    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
     
    CREATE TABLE IF NOT EXISTS `users` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `username` varchar(255) NOT NULL,
      `password` varchar(255) NOT NULL,
      PRIMARY KEY (`id`),
      KEY `username` (`username`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
     
    CREATE TABLE IF NOT EXISTS `groups` (
      `username` varchar(255) NOT NULL,
      `group` varchar(255) NOT NULL,
      PRIMARY KEY (`username`,`group`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    INSERT INTO `users` (`id`, `username`, `password`) VALUES
    (2, 'admin', '21232f297a57a5a743894a0e4a801fc3'),
    (3, 'olivier', 'd3ca5dde60f88db606021eeba2499c02');
     
    INSERT INTO `groups` (`username`, `group`) VALUES
    ('admin', 'administrateur'),
    ('olivier', 'user');
    J'ai crée un pool jdbc sous glassfish qui ping bien, et ma datasource jdbc est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <auth-realm name="testRealm" classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm">
         <property name="user-name-column" value="username"></property>
         <property name="password-column" value="password"></property>
         <property name="group-name-column" value="group"></property>
         <property name="group-table" value="groups"></property>
         <property name="user-table" value="users"></property>
         <property description="null" name="datasource-jndi" value="jdbc/mysql/jaas/resource"></property>
         <property name="jaas-context" value="jdbcRealm"></property>
         <property description="null" name="digest-algorithm" value="MD5"></property>
    </auth-realm>
    ma propriété datasource-jndi référencant bien le nom JNDI de ma datasource JDBC laquelle est greffée sur mon pool JDBC qui ping bien ma base...

    Quand j'accède à une page jsp quelconque, j'ai bien la fenêtre de choix du login/mdp qui s'ouvre mais quand je tape admin/admin (identifiants rentrés en base) cela ne marche pas j'ai l'exception suivante :

    [#|2012-04-16T14:00:46.046+0200|WARNING|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=69;_ThreadName=Thread-2;|Exception
    com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Security Exception
    at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:394)
    at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:240)
    at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:153)
    at com.sun.web.security.RealmAdapter.authenticate(RealmAdapter.java:512)
    at com.sun.web.security.RealmAdapter.authenticate(RealmAdapter.java:453)
    at org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:168)
    at com.sun.web.security.RealmAdapter.invokeAuthenticateDelegate(RealmAdapter.java:1326)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:551)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:623)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:722)
    Caused by: javax.security.auth.login.LoginException: Security Exception
    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:870)
    at javax.security.auth.login.LoginContext.access$000(LoginContext.java:203)
    at javax.security.auth.login.LoginContext$4.run(LoginContext.java:698)
    at javax.security.auth.login.LoginContext$4.run(LoginContext.java:696)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:695)
    at javax.security.auth.login.LoginContext.login(LoginContext.java:594)
    at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:382)
    ... 29 more
    Caused by: java.lang.SecurityException
    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:871)
    ... 36 more
    je reste désespérement bloqué depuis plusieurs jours...

    J'ai essayé un tas de choses mais sans résultats, j'ai lu une tonne de tuto etc...je dois oublier de faire quelque chose de tout bête...mais quoi ?

    Merci de votre aide

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 179
    Points : 77
    Points
    77
    Par défaut
    J'ai finalement trouvé l'erreur

    En fait, mon pool de connexion ping bien, ma propriété DatabaseName est correctement remplie mais il fallait juste modifier les propriétés Url et URL (qui sont en fait la même propriété ?).

    En remplaçant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    jdbc:mysql://:3306
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    jdbc:mysql://:3306/jaas
    ça marche nickel.

    Voilà comment perdre 2 jours

Discussions similaires

  1. Problème authentification avec couplage Apache/Tomcat
    Par arN34 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 28/05/2007, 10h26
  2. Problème authentification Tomcat
    Par fabou3377 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 09/04/2007, 09h53
  3. [Système] Problème authentification site
    Par bilowlex dans le forum Langage
    Réponses: 3
    Dernier message: 17/02/2007, 08h52
  4. Problème authentification basic
    Par Ben42 dans le forum Langage
    Réponses: 2
    Dernier message: 26/10/2006, 11h21
  5. Problème authentification utilisateurs.
    Par Mevil dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 02/06/2006, 09h04

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