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

Servlets/JSP Java Discussion :

tracker les utilisateurs


Sujet :

Servlets/JSP Java

  1. #1
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut tracker les utilisateurs
    salut,

    Je travaille sur une application web developpé sous struts. Je veux tracker les utilisateurs qui viennent sur mon site web.
    Pour cela j'utilise les cookies. j'ai ecrit une classe CookieByServers.java qui contient le code 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    private FilterConfig config = null;
        private ArrayList list = null;
        private final static String FILTER_APPLIED = "TrackingFilter_already_applied";
     
     
        public void setFilterConfig(FilterConfig _config) {
            this.config = _config;
        }
     
        public void init(FilterConfig _config) {
            this.config = _config;
        }
     
        public FilterConfig getFilterConfig() {
            return this.config;
        }
     
        //Clean up resources
        public void destroy() {
        	this.config=null;
        }
     
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
     
        	if(request.getAttribute(FILTER_APPLIED)==null){
                request.setAttribute(FILTER_APPLIED,Boolean.TRUE);
                String hostname = InetAddress.getLocalHost().getHostName();
                Cookie serversCookie = new Cookie("trackingServer",hostname);
                // envoi du cookie vers le navigateur du client
                ((HttpServletResponse)response).addCookie(serversCookie);
                chain.doFilter(request, response);
            }else {
                chain.doFilter(request, response);
            }
        }
     
     
     
    }
    et dans mon fichier web.xml j'ai mis ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     <filter-mapping>
        <filter-name>CookieByServers</filter-name>
        <url-pattern>*.jsp</url-pattern>
      </filter-mapping>
     
      <filter-mapping>
        <filter-name>CookieByServers</filter-name>
        <url-pattern>*.do</url-pattern>
      </filter-mapping>
    Le pb c'est que lorsque je tappe mon url j'ai une 404 et j'ai ceci dans mon url

    www.monsite.com/jsp/null?lang=fr&country=FRA au lieu d'avoir
    www.monsite.com/jsp/home.do?lang=fr&country=FRA

    Je n'arrive pas à voir ou est le soucis.
    Merci d'avance

  2. #2
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Dans ton web.xml, tu n'aurais pas oublié de déclarer la servlet CookieByServers dans la balise <filter> ?

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <filter>
        <filter-name>CookieByServers</filter-name>
        <filter-class>nomDuPackage.CookieByServers</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CookieByServers</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
    Sinon, dans la méthode doFilter, le paramètre que tu as appelé request est de type ServletRequest et non HttpServletRequest.

    Il faut donc modifier les :
    par des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((HttpServletRequest)request).getAttribute
    Modératrice Java - Struts, Servlets/JSP, ...

  3. #3
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    pardon j'ai oublié de mettre ce bout de code, si j'ai bien declaré ma servlet mais j'ai oublié de copier/coller le code qui lui correcpond :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     <filter>
        <filter-name>CookieByServers</filter-name>
        <display-name>CookieByServers</display-name>
        <description>set a cookie for each response for the CSS (load balancing)</description>
        <filter-class>com.web.filter.CookieByServers</filter-class>
      </filter>

    et les setAttribute, je les cast aussi ?

  4. #4
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Citation Envoyé par gloglo Voir le message
    et les setAttribute, je les cast aussi ?
    Ben oui.
    Modératrice Java - Struts, Servlets/JSP, ...

  5. #5
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    en fait, j'avoue que c'est la premiere fois que je fais ceci (travailler avec les cookies) et ce code est un code que j'ai recupéré sur le net et je ne comprend pad bien très bien le mode de fonctionnement.

  6. #6
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Je ne connais rien à la gestion des cookies.
    Je vais donc difficilement pouvoir t'aider sur le sujet.
    Désolée.
    Modératrice Java - Struts, Servlets/JSP, ...

  7. #7
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    le pb se pose dans le cas ou les utilisateurs essayent de se connecter au site càd en mode logué, en mode non logué le pb ne se pose pas.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Citation Envoyé par gloglo Voir le message
    Le pb c'est que lorsque je tappe mon url j'ai une 404 et j'ai ceci dans mon url

    www.monsite.com/jsp/null?lang=fr&country=FRA au lieu d'avoir
    www.monsite.com/jsp/home.do?lang=fr&country=FRA
    Tu tapes quelle URL ? parce qu'un Filter est seulement un intermédiaire, ce n'est pas lui qui va te rediriger vers une page...

  9. #9
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    en fait je tappe cette url :

    www.monsite.com/jsp/home.do?lang=fr&country=FRA

    et après je vais pour me loguer et la j'ai

    www.monsite.com/jsp/null?lang=fr&country=FRA

    au lieu de www.monsite.com/jsp/home.do?lang=fr&country=FRA
    en fait quand je me logue, je suis renvoyé sur la meme URL sur laquelle je suis.
    Est ce que ça peut avoir un rapport avec le fait qu'en me loguant j'accede en mode securisé ?

    normalement il est censé filter sur tous les .do mais il parrait qu'il n'arrive pas à le faire puisqu'il met null.

    merci

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Il y a un truc que je pige pas... tu as bien déclaré "home.do" comme action struts ?

    Penses à mettre un point d'arrêt et vérifier en mode debug par où il passe.

  11. #11
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    oui home.do est bien une action que je declare boen dans le struts-config.xml.
    d'ailleurs je n'avais jamais le pb avec cet action jusqu'a ce que je rejoute dans mon web.xml le code cité plus haut.
    si j'enleve ce code de mon web.xml et que je reexecute mon appli, j'arrive bien à me loguer

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Citation Envoyé par gloglo Voir le message
    et dans mon fichier web.xml j'ai mis ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     <filter-mapping>
        <filter-name>CookieByServers</filter-name>
        <url-pattern>*.jsp</url-pattern>
      </filter-mapping>
     
      <filter-mapping>
        <filter-name>CookieByServers</filter-name>
        <url-pattern>*.do</url-pattern>
      </filter-mapping>
    Je sèche un peu là... mais il ne me semble pas que tu puisse faire plusieurs <filter-mapping/> pour un même Filter... Peux tu enlever le filtre sur *.jsp pour voir ?

  13. #13
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    je viens d'essayer et même soucis. si on peut definir plusieurs filter-mapping, je l'est fait pour d'autres filtres

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Essaie de désactiver le filtre provisoirement et de gérer le cookie dans ton action struts :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Cookie serversCookie = new Cookie("trackingServer",hostname);
    // envoi du cookie vers le navigateur du client
    response.addCookie(serversCookie);
    Je ne suis pas habitué à manipuler les cookies, mais normalement celà consiste juste à attacher des instructions en en-tête de la response HTTP...

  15. #15
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    je veux faire ceci sur toutes les pages de mon site, cela voudra dire que je doit gerer le cookie dans toutes mes action struts, d'ou l'interet d'utiliset le filter.
    je vais essayer quand meme au moins pour cette action

  16. #16
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    Je fais par contre afficher une trace du path et j'obtiens ceci :
    ***[CookieByServer] : servletpath : /web/home.do

    au moment ou dans l'url il me met null.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Citation Envoyé par gloglo Voir le message
    je veux faire ceci sur toutes les pages de mon site, cela voudra dire que je doit gerer le cookie dans toutes mes action struts, d'ou l'interet d'utiliset le filter.
    je vais essayer quand meme au moins pour cette action
    C'est juste provisoire pour faire un test. De toute façon tel que c'est écrit ton cookie n'est généré qu'à la première requête utilisateur (ce qui est tout à fait normal parce qu'on ne vas pas injecter un cookie à chaque requête).

    cf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(request.getAttribute(FILTER_APPLIED)==null){
         request.setAttribute(FILTER_APPLIED,Boolean.TRUE);
         // on crée le cookie

  18. #18
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    j'ai fait ceci sans mon action :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Cookie serversCookie = new Cookie("trackingServer",hostname);
    //          envoi du cookie vers le navigateur du client
                response.addCookie(serversCookie);
     
     
            	//lecture du cookie envoyé par le browser
            	Cookie[] cookies = ((HttpServletRequest)request).getCookies();
            	String valeur = "";
            	for(int i=0;i<cookies.length;i++) {
            	  if(cookies[i].getName().equals("trackingServer")) {
            	    valeur=cookies[i].getValue();
            	    WebLog.print("******" + i + " : " + valeur);
            	  }
            	}
    et voici le resultat de mes traces :

    [CookieByServer] : hostname : TFTFgloglo
    2007/11/09 15:57:33.893 INFO INTERNAL ***[CookieByServer] : servletpath22 : /web/home.do

Discussions similaires

  1. Comment faire déconnecter les utilisateurs d'une base
    Par ENIT-Info dans le forum Access
    Réponses: 23
    Dernier message: 28/02/2017, 14h57
  2. Réponses: 6
    Dernier message: 04/05/2005, 18h39
  3. Eviter d'inviter tous les utilisateurs au groupe root
    Par ggnore dans le forum Administration système
    Réponses: 24
    Dernier message: 21/10/2004, 20h19

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