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 :

Rediriger vers un servlet après utilisation du login.html pour authentification


Sujet :

Wildfly/JBoss Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Points : 37
    Points
    37
    Par défaut Rediriger vers un servlet après utilisation du login.html pour authentification
    Bonsoir,

    je suis face à un problème durant mon développement d’application : celle-ci est une appli Java JEE utilisant Jboss (wildfly).
    J'aimerais mettre en place un système d'authentification, pour cela j'utilise le fichier login.html 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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    	<head>
    	  <title>Identification</title>
    	</head>
     
    	<body>
    		<form action="j_security_check" method="post">
    			<table>
    				<tr>
    					<td> Login : </td>
    					<td><input type="text" autocomplete="off" name="j_username" /></td>
    				</tr>
    				<tr>
    					<td> Mot de Passe :	</td>
    					<td><input type="password" autocomplete="off" name="j_password" /></td>
    				</tr>
    			</table>
     
    			<input type="submit" value="Connexion" />
    		</form>
     
    	</body>
     
    </html>
    Ici on fait appel à l'action j_security_check pour enregistrer les identifiants afin de procéder aux contrôles d'accès à certains servletts plus tard. Cependant, j'aimerais également faire d'autres traitements comme par exemple enregistrer le login de l'utilisateur dans une variable session lorsque la connexion se passe bien.
    Dans tous les tutoriels que j'ai vu sur internet, les gens tapaient explicitement l'url d'accès à un contrôleur depuis le navigateur pour y accéder après authentification de cette manière là.
    J'aimerais que cela se fasse automatiquement, seulement comme on utilise déjà l'action j_security_check je ne peux pas rediriger vers un de mes servlett.

    Auriez-vous des suggestions ?

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    Utilises tu un framework pour géré l'authentification / authorisation ?
    Sinon cela te faciliterais grandement la prise en charge.
    Personnellement, j'utilise Apache Shiro, il est très complet et facile a mettre en place.
    De plus il garde un état des sessions par utilisateur et l'authorisation très fine ce qui correspond a ce que tu souhaites faire !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Comme tu utilises une authentification JAAS, il faudrait passer par un custom login module pour faire des actions spécifiques.
    Tu peux étendre par exemple la classe UsernamePasswordLoginModule et redéfinir la méthode login()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public boolean login() throws LoginException
    {
        boolean ok = super.login();
        if (ok)
        {
            // faire un truc spécifique....
        }
    }
    Dans le fichier standalone.xml, il faudra définir ton domaine de sécurité dans ce genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <security-domain name="mon-domaine-auth" cache-type="default">
       <authentication>
          <login-module code="le.package.LoginModuleSpecifique" flag="required" module="si_besoin">
             <module-option name="password-stacking" value="useFirstPass"/>
          </login-module>
       </authentication>
    </security-domain>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Points : 37
    Points
    37
    Par défaut
    Merci pour vos réponses, je vais explorer la piste fournie par OButterlin.
    Du coup, dans la conditionnelle if(ok) c'est là que je vais travailler avec mes variables de session. Cependant comment j'y accède ?
    Dans mes servletts j'avais un objet HttpServletRequest dans lequel je travaillais avec mes variables de session.

    J'ai déjà un security-domain qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <security-domain name="secureDomain" cache-type="default">
        <authentication>
            <login-module code="Database" flag="required">
                <module-option name="dsJndiName" value="java:jboss/datasources/UserDS"/>
                <module-option name="principalsQuery" value="select passwd from Users where username=?"/>
                <module-option name="rolesQuery" value="select role, 'Roles' from UserRoles where username=?"/>
            </login-module>
        </authentication>
    </security-domain>

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Autant pour moi, si tu veux faire un traitement avec la session, il vaut mieux passer par un "custom valve", d'ailleurs, c'est encore plus simple
    Tu crées une classe qui étend ExtendedFormAuthenticator comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class CustomAuthenticator extends ExtendedFormAuthenticator
    {
        @Override
        public boolean authenticate(Request request, HttpServletResponse response, LoginConfig loginConfig) throws IOException
        {
            boolean result = super.authenticate(arg0, arg1, arg2);
            if (result)
            {
                  // ici, tu fais ton traitement
            }
            return result;
        }
    }
    Ensuite, il faut créer un fichier jboss-web.xml qui ressemblera à ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-web>
       <security-domain>mon-application-auth</security-domain>
       <valve>
               <class-name>mon.package.CustomAuthenticator</class-name>
       </valve>
    </jboss-web>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Points : 37
    Points
    37
    Par défaut
    Je vais essayer ça merci, en revanche il faut que j'utilise une librairie spécifique dans mon projet JBoss pour accéder à cette classe ExtendedFormAuthenticator ?
    J'ai essayer de faire import org.jboss.web.tomcat.security.ExtendedFormAuthenticator; mais ça ne donne rien.

Discussions similaires

  1. Rediriger vers une page après un compte à rebours
    Par HAbroc dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 09/06/2014, 13h31
  2. rediriger vers une servlet
    Par cameleon8010 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/04/2010, 14h04
  3. Réponses: 3
    Dernier message: 27/11/2008, 17h57
  4. Impossible de rediriger vers une page après un délai
    Par Gouyon dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/11/2008, 09h24
  5. Rediriger vers une page après sélection dans un select
    Par belzeluc dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 07/11/2006, 22h32

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