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 :

Obliger l'utilisateur à passer par la page login


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Points : 67
    Points
    67
    Par défaut Obliger l'utilisateur à passer par la page login
    Bonjour à tous

    Je viens de réaliser une application j2ee avec struts et hibernate,
    et je suis sur le point de déployer cette application web en intranet dans une entreprise (en mode client/serveur) .

    MAIS , je me suis appreçus que le mode d'authentification ne sert absolument à rien et mon application est non sécurisée,je m'explique :

    En premier lieu j'ai une page login qui mène sur 4 pages jsp selon le statut de l'utilisateur ,et biensur si le compte saisis est erroné la page de login ne mènera null part .

    le problème que cette page de login est facilement évitable il suffit de saisir comme url :

    http://localhost:8080/Report/pagecible1.jsp

    et on accdera à la page 1 .

    Donc si quelqu'un pourrais m'aider pour comment obliger l'utilisateur de passer par la page Login au lieu de taper les URLs des pages de mon application par ci et par là .

    Merci.

  2. #2
    Membre actif
    Avatar de David Gimelle
    Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2007
    Messages : 79
    Points : 221
    Points
    221
    Par défaut
    Bonjour,

    Ceci se configure dans le fichier web.xml. Avec la balise <security-constraint>
    Tu trouveras des infos dans le faq de developpez.com : http://java.developpez.com/faq/struts/?page=security

    David Gimelle
    Developpeur J2ee
    blog: http://getj2ee.over-blog.com

  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
    Il y a également la possibilité de passer par un filtre qui testera la présence d'un objet en session représentant l'utilisateur authentifié.
    S'il n'existe pas -> redirection vers la page de login
    Quelque chose 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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    package mon.package;
     
    public class ServletFilter implements Filter
    {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
                ServletException
        {
            HttpServletRequest httpRequest = (HttpServletRequest)request;
            HttpSession session = null;
            try
            {
                session = httpRequest.getSession(false);
                if (session == null || session.getAttribute("AUTHENTIFICATION") == null)
                {
                    throw new ServletException("Aucune session active ou l'utilisateur n'est pas authentifié");
                }
                else chain.doFilter(request, response);                
            }
            catch (Exception e)
            {
                throw new ServletException(e);
            }
        }
    }
    Ensuite, il faut inscrire le filtre dans web.xml et le tour est joué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
    <filter>
        <filter-name>ServletFilter</filter-name>
        <filter-class>mon.package.ServletFilter</filter-class>
    </filter>
     
    <filter-mapping>
        <filter-name>ServletFilter</filter-name>
        <url-pattern>*</url-pattern>
    </filter-mapping>
    ...
    A+

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Points : 67
    Points
    67
    Par défaut
    Merci pour vos réponses mais j'ai deux petites questions :

    D'abord pour David Gimelle :

    J'ai déja penser à cette alternative mais je voyais pas comment l'utiliser à ma faveur ,car comment je peux réstreindre des privilèges à des utilisateurs qui sont stockés dans une base de donnnée sql aileurs, et qui peuvent etre nombreux ,comment puis-je les mettre dans un seul groupe ?? C'est la ou j'ai fais ce Post .


    Pour OButterlin :

    J'ai compris l'idée est c'est peut etre une bonne alternative ,certs j'ai quelques questions consrnat l'implémentation de cette solution .

    Est ce que je dois déclarer un attribut dans la session ,cet attribut (AUTHENTIFICATION") est à "true" quand l'utilisateur s'identifie auprès de la page login .

    Puis utiliser la valeur de cet attribut dans le filter ?

    Je crois ce qui traduit cette ligne de votre code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (session == null || session.getAttribute("AUTHENTIFICATION") == null);
    De plus comment puis-je le rediriger vers la page login.jsp ?

  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
    Citation Envoyé par Viscapon Voir le message
    ...
    J'ai compris l'idée est c'est peut etre une bonne alternative ,certs j'ai quelques questions consrnat l'implémentation de cette solution .

    Est ce que je dois déclarer un attribut dans la session ,cet attribut (AUTHENTIFICATION") est à "true" quand l'utilisateur s'identifie auprès de la page login .

    Puis utiliser la valeur de cet attribut dans le filter ?

    Je crois ce qui traduit cette ligne de votre code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (session == null || session.getAttribute("AUTHENTIFICATION") == null);
    De plus comment puis-je le rediriger vers la page login.jsp ?
    Oui, c'est l'idée.
    Dans la servlet de login, si tout est OK, tu positionnes un attribut en session sous le nom "AUTHENTIFICATION" (ici pour l'exemple).
    Tu n'as pas besoin de mettre quelque chose de bien précis, ça peut être une simple chaine de caractère ou un objet quelconque, le but est que quelque chose existe en session sous ce nom ou pas.

    Pour la redirection vers la page de login, tu peux le faire directement dans le filtre comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,            ServletException
    {
       ...
       ((HttpServletResponse)response).sendRedirect(((HttpServletRequest)request).getContextPath() + "/index.jsp");
    ...
    }

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Points : 67
    Points
    67
    Par défaut
    Dans la servlet de login, si tout est OK, tu positionnes un attribut en session sous le nom "AUTHENTIFICATION"
    Excuse moi OButterlin ,mais comment puis-je implementer ceci,càd j'ai une action userLoginAction qui vérifie la validité du compte et qui fait un forword vers la page cible(1,2,3,4) .

    Donc comment je dois faire pour positionner un attribut en session dans le cas de la servlet login?

  7. #7
    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
    userLoginAction est une action struts ?
    Si oui, tu as l'objet HttpServletRequest qui fait partie de la signature de ta méthode execute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse)
    {
       ... tous les contrôles
     
       ... si c'est ok, tu places un objet quelconque dans la session
       request.getSession().setAttribute("AUTHENTIFICATION", "OK");
       return mapping.findForward("succes");
     
       ... sinon
       request.getSession().removeAttribute("AUTHENTIFICATION");
       return mapping.findForward("erreur");
    }
    Si c'est une servlet simple tu as également l'objet HttpServletRequest dans la signature de la méthode doPost ou doGet ou service

    A+

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Points : 67
    Points
    67
    Par défaut
    userLoginAction est une action struts ?
    Oui il s'agit d'une action struts.

    Bon j'ai fais les modifes que tu m'a recommender, et probleme numéro 1 :

    J'arrive pas à acceder à ma page userLogin.jsp c'est comme ci elle aussi est filtrée vue que l'utilisateur n'est pas encore connécté (à mon avis) .

    voila mon action struts et web.xml

    J'ai garder la class ServletFilter comme tu me l'a proposé initialment vu que je m'y connait pas trop au traitment des filter .

    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
     
     
    /*
     * Generated by MyEclipse Struts
     * Template path: templates/java/JavaClass.vtl
     */
    package com.iam.struts.action;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import com.iam.struts.form.UserLoginForm;
    import iam.hiebrnate.*;
     
     
     
     
    public class UserLoginAction extends Action {
     
    	public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response) {
     
    		UserLoginForm userLoginForm = (UserLoginForm) form;
    		User user = valide.identify(userLoginForm.getLogin(),userLoginForm.getPassword());
     
     
    		if(user != null)
    		  {
    			request.getSession().setAttribute("AUTHENTIFICATION", "OK");
    			request.getSession(true).setAttribute("user",user);
    			if(valide.Access(userLoginForm.getLogin(), userLoginForm.getPassword())==1){
     
    		   return mapping.findForward("success");
    		   }
     
     
    		if(valide.Access(userLoginForm.getLogin(), userLoginForm.getPassword())==2){
     
    			   return mapping.findForward("success1");}
     
     
    	if(valide.Access(userLoginForm.getLogin(), userLoginForm.getPassword())==3){
     
    		   return mapping.findForward("success2");}
     
     
    	if(valide.Access(userLoginForm.getLogin(), userLoginForm.getPassword())==4){
     
    		   return mapping.findForward("success3");}
     
    		  }
    		request.getSession().removeAttribute("AUTHENTIFICATION");
    		request.getSession(true).setAttribute("error","error");
    		  return mapping.findForward("mem");
     
    }}


    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
     
        </init-param>
     
        <init-param>
     
          <param-name>debug</param-name>
          <param-value>3</param-value>
        </init-param>
        <init-param>
     
          <param-name>detail</param-name>
          <param-value>3</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
     
      </servlet>
      <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    <filter>
        <filter-name>ServletFilter</filter-name>
        <filter-class>mon.package.ServletFilter</filter-class>
    </filter>
     
    <filter-mapping>
        <filter-name>ServletFilter</filter-name>
        <url-pattern>*</url-pattern>
    </filter-mapping>
    </web-app>

  9. #9
    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
    Oui, effectivement elle passe également par le filtre puisque tu utilises "*" comme attribut de l'url-pattern.
    Ce que tu devrais faire, c'est mettre toutes les pages nécessitant une authentification dans des sous-répertoires d'un répertoire donné (on va dire "pages") et modifier l'attribut url-pattern en "/pages/*"
    Bien sûr, tu mets tout ce qui concerne le login ailleurs...
    Attention toutefois, dans cet exemple, seules les pages sont traitées, il faudrait faire un autre mapping pour les actions et traiter l'action de login à part.
    L'alternative est de tester dans ton filtre l'url demandée et ne faire le test d'authentification que si tu n'es pas entrain de te connecter (login)
    Tu peux récupérer cette information via la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((HttpServletRequest)request).getRequestURI()
    a+

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Points : 67
    Points
    67
    Par défaut
    Apres modification j'arrive à afficher ma page userLogin.jsp .

    Mais après rien ne marche : l'action userLogin ne fait plus son travail ,sans doute c'est en relation avec le point que vous avez évoqué précedament :

    Attention toutefois, dans cet exemple, seules les pages sont traitées, il faudrait faire un autre mapping pour les actions et traiter l'action de login à part.
    Là je dois dire que je suis dans le noire


    Consernant l'alernative pour ce mysterieux problème :

    De quel URL s'agit-il ? Celui lié à l'action (..../userLogin.do ) ou lequel au just ?

    Pour le traitment de l'url je vois pas comment dois-je le faire et à quel niveau du filtre .

    Je dois dire que c'est la première fois que j'utilise les filtres donc difficile de coder un bon filtre du premier coup .

    Peut etre un petit exemple de filtre pour traiter l' URL serait le bienvenu .

  11. #11
    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
    Citation Envoyé par Viscapon Voir le message
    Peut etre un petit exemple de filtre pour traiter l' URL serait le bienvenu .
    No problemo
    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
     
    HttpServletRequest httpRequest = (HttpServletRequest)request;
    HttpSession session = null;
    try
    {
        request.setCharacterEncoding("ISO-8859-1");
     
        String uri = httpRequest.getRequestURI();
        logger.debug(uri);
     
        session = httpRequest.getSession(false);
        if (session != null || uri.indexOf("obia.common.objects.Login") != -1 || uri.equals(httpRequest.getContextPath()+"/"))
        {
            // Login case
            // ==========
            if (uri.indexOf("obia.common.objects.Login") != -1 || uri.equals(httpRequest.getContextPath()+"/"))
            {
                if (session != null) session.invalidate();
            }
            else
            {
                String windowUID = request.getParameter("WindowUID");
                if (windowUID != null)
                {
                    SessionContext sessionContext = (SessionContext)session.getAttribute(windowUID);
                    if (sessionContext == null) throw new ServletException("Aucun context de session valide");
                    if (!sessionContext.getHostIP().equals(request.getRemoteHost())) throw new ServletException("*** Tentative de piratage de la session " + session.getId() + " de l'utilisateur " + sessionContext.getUserContext().getUserLogin() + ". Adresse de l'attaquant : " + request.getRemoteHost()) ;
                }
            }
            chain.doFilter(request, response);                
        }
        else 
        {
            throw new ServletException("Aucune session active");
        }
    }
    catch (Exception e)
    {
        logger.error("Erreur dans le traitement de la demande : " + e.getMessage());
        throw new ServletException(e);
    }

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Points : 67
    Points
    67
    Par défaut
    Merci encore une fois OButterlin pour ta reponse, maintenant j'esseye de mettre en place un filtre qui fera l'affaire en se basant sur les deux exemples de code que tu m'avais deja postés .

    A ce propos j'aimerais que tu m'explique quelques passage pour que je puisse adapter ceci à mon application :

    Consernant le premier exemple de code :


    Je me suis un peu arrété à cette ligne surtout le "false" c'est prkoi faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     try
            {
                session = httpRequest.getSession(false);
    ........
    Dans le 2eme exemple de code de l'URI :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     if (uri.indexOf("obia.common.objects.Login") != -1 || uri.equals(httpRequest.getContextPath()+"/"))

    J'ai pas bien compris ce if !!

    C'est quoi ce ("obia.common.objects.Login") , et pkoi le (!=-1) ??


    Bon les choses se compliquent d'avantages pour un débutant comme moi dans ce qui vient apres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String windowUID = request.getParameter("WindowUID");
    Pourquoi utiliser un tel parametre ?

    Et encore une mystérieuse ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     if (!sessionContext.getHostIP().equals(request.getRemoteHost())) 
    throw new ServletException("*** Tentative de piratage de la session " + session.getId() + " de l'utilisateur " + sessionContext.getUserContext().getUserLogin()
     + ". Adresse de l'attaquant : " + request.getRemoteHost()) ;
    Je reviens aussi à une ancienne question est ce que je dois utiliser l'URL de l'acion :

    "http://localhost:8080/Report/userLogin.do" pour la comparer dans le filtre ?

  13. #13
    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
    Citation Envoyé par Viscapon Voir le message
    Je me suis un peu arrété à cette ligne surtout le "false" c'est prkoi faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     try
            {
                session = httpRequest.getSession(false);
    ........
    Dans le test, le fait que la session n'existe pas démontre que l'utilisateur n'est pas connecté. Si tu fais httpRequest.getSession(), il la créera si elle n'existe pas, donc, derrière cette instruction, tu auras toujours un objet session. Avec getSession(false), si elle n'existe pas, la méthode renvoie null.

    Citation Envoyé par Viscapon Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (uri.indexOf("obia.common.objects.Login") != -1 || uri.equals(httpRequest.getContextPath()+"/"))
    "obia.common.objects.Login" est le nom de la servlet de traitement du login (dans mon framework). Donc, si l'URI contient cette chaine, c'est qu'on a soumis le formulaire de login et donc il faut ignorer cet élément.
    Pour la deuxième partie c'est un peu plus tordu... J'utilise la page index.jsp pour faire le login et donc, si tu ne saisis que "http://nomServeur:port/NomApplication" pour lancer l'application, c'est cette URI que passera, il faudrait également ajouter un test sur httpRequest.getContextPath()+"/index.jsp" pour être complet... mais ce n'était qu'un exemple...

    Citation Envoyé par Viscapon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String windowUID = request.getParameter("WindowUID");
    Pourquoi utiliser un tel parametre ?
    Là, c'est encore lié à mon framework puisque les objets ne sont pas liés à la session (uniquement) mais à un identificateur de fenêtre (ce qui permet d'avoir des contextes différents sur une même session)

    Citation Envoyé par Viscapon Voir le message
    Et encore une mystérieuse ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     if (!sessionContext.getHostIP().equals(request.getRemoteHost())) 
    throw new ServletException("*** Tentative de piratage de la session " + session.getId() + " de l'utilisateur " + sessionContext.getUserContext().getUserLogin()
     + ". Adresse de l'attaquant : " + request.getRemoteHost()) ;
    C'est un truc à faire quand on veut éviter de se faire pirater les objets en session. Après le login, on stoque l'adresse IP du client dans un objet dans le contexte et on test à chaque demande que l'IP du demandeur est toujours la même que celui qui c'était connecté

    Citation Envoyé par Viscapon Voir le message
    Je reviens aussi à une ancienne question est ce que je dois utiliser l'URL de l'acion :
    "http://localhost:8080/Report/userLogin.do" pour la comparer dans le filtre ?
    Dans ton cas, je testerais uri.indexOf(httpRequest.getContextPath()+"/userLogin.do") != -1

    A+

  14. #14
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Points : 67
    Points
    67
    Par défaut
    Merci encore une fois OButterlin pour ton explication.

    Et pour faire simple j'ai utilisé le filtre suivant, malheureusement j'ai toujours la même erreur quand je soumets le formulaire de la page Userlogin.jsp

    Bref voila mon code ,et j'aimerais bien que tu 'y jette un coup d'œil histoire de voir si j'ai oublier un truc .


    Class ServletFilter.java :

    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
     
     
    public class ServletFilter implements javax.servlet.Filter  {
     
    	private FilterConfig filterConfig = null;
    	  public void init(FilterConfig filterConfig)
    	    throws ServletException {
    	      this.filterConfig = filterConfig;
    	  }
     
    	 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
         ServletException
    {
     HttpServletRequest httpRequest = (HttpServletRequest)request;
     HttpServletResponse resp = (HttpServletResponse)response ;
     
     HttpSession session = null;
     
     try
     {
    	 request.setCharacterEncoding("ISO-8859-1");
     
    	    String uri = httpRequest.getRequestURI();
     
     
         session = httpRequest.getSession(false);
     
        	 if (uri.indexOf(httpRequest.getContextPath()+"/userLogin.do") != -1 )
        	 {
        	     if (session == null || session.getAttribute("AUTHENTIFICATION") == null)
        	     {
        	    	 resp.sendRedirect("/userLogin.jsp");
        	         throw new ServletException("Aucune session active ou l'utilisateur n'est pas authentifié");
     
        	     }
        	     else chain.doFilter(request, response);  
     
        	 }
             }
     
     catch (Exception e)
     {
         throw new ServletException(e);
     }
     
    }
    	 public void destroy() {
    	 	}
     
    }
    A signaler que dans ce filtre je traite l'URI de l'action Userlogin dans un premier if ,puis j'attack l'objet AUTHENTIFICATION dans un 2eme if (imbriqué) .

  15. #15
    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
    Ici, tu dois tester
    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
    if (uri.indexOf(httpRequest.getContextPath()+"/userLogin.do") == -1 )
    {
        // Dans ce cas, on n'est pas dans une demande de login, il faut faire les autres tests
       if (session == null || session.getAttribute("AUTHENTIFICATION") == null)             
       {
          resp.sendRedirect("/userLogin.jsp");                 
          // Ne pas lancer d'exception, sinon tu ne vas pas afficher la page de login
       }
       else chain.doFilter(request, response);  
    }
    else
    {
       // C'est la demande de login, il faut poursuivre
       chain.doFilter(request, response);
    }
    String.indexOf("unTruc") renvoie la position à laquelle on trouve "unTruc" ou -1 s'il ne le trouve pas

  16. #16
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Points : 67
    Points
    67
    Par défaut
    Voila mon nouveau code , biensur si je le reposte c'est que j'ai toujours la meme erreur

    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
     
    public class ServletFilter implements javax.servlet.Filter  {
     
    	private FilterConfig filterConfig = null;
    	  public void init(FilterConfig filterConfig)
    	    throws ServletException {
    	      this.filterConfig = filterConfig;
    	  }
     
    	 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
         ServletException
    {
     HttpServletRequest httpRequest = (HttpServletRequest)request;
     HttpServletResponse resp = (HttpServletResponse)response ;
     
     HttpSession session = null;
     
     try
     {
    	 request.setCharacterEncoding("ISO-8859-1");
     
    	    String uri = httpRequest.getRequestURI();
     
     
         session = httpRequest.getSession(false);
     
        	 if (uri.indexOf(httpRequest.getContextPath()+"/userLogin.do") == -1 )
        	 {
        	     if (session == null || session.getAttribute("AUTHENTIFICATION") == null)
        	     {
        	    	 resp.sendRedirect("/userLogin.jsp");  
     
        	     }
        	     else chain.doFilter(request, response);   
     
        	 }
     
        	 else
        	 {
        	    // C'est la demande de login, il faut poursuivre
        	    chain.doFilter(request, response);
        	 }
             }
     
     catch (Exception e)
     {
         throw new ServletException(e);
     }
     
    }
    	 public void destroy() {
    	 	}
     
    }
    Est ce qu'il n'ya pas d'autres choses à modifier dans le fichier web.xml ou autres ?

  17. #17
    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
    C'est quoi au juste l'erreur ?

  18. #18
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    C'est quoi au juste l'erreur ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    La ressource demandée (/Report/userLogin.do) n'est pas disponible.
    Parfois j'ai une autre erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    La ressource demandée (/Report/success.jsp) n'est pas disponible.

    Sachant que seccuss.jsp est l'une des pages cibles après authentification.

  19. #19
    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
    Tu passes dans le filtre ?
    Peux-tu mettre un point d'arrêt et suivre l'exécution ?

  20. #20
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Points : 67
    Points
    67
    Par défaut
    Je crois que c'est peut etre du au fait que j'ai déplacé tout les autres pages dans un repertoir /pages pour distinguer la page userLogin.jsp.

    Concernat le point d'arret comment dois-je le mettre ?

Discussions similaires

  1. imprimer sans passer par la page de dialogue
    Par fadelghani dans le forum Langage
    Réponses: 5
    Dernier message: 27/03/2015, 16h03
  2. Acceder à une page ASP.NET sans passer par la case Login
    Par ehochedez dans le forum ASP.NET
    Réponses: 8
    Dernier message: 07/10/2010, 10h28
  3. eviter de passer par la page login
    Par mchicoix dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/12/2007, 13h41
  4. Réponses: 12
    Dernier message: 22/05/2006, 06h18
  5. Réponses: 4
    Dernier message: 05/02/2004, 18h18

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