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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    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 confirmé

    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
    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

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    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 confirmé

    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
    Par défaut
    Citation Envoyé par gloglo Voir le message
    et les setAttribute, je les cast aussi ?
    Ben oui.

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    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 confirmé

    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
    Par défaut
    Je ne connais rien à la gestion des cookies.
    Je vais donc difficilement pouvoir t'aider sur le sujet.
    Désolée.

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    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...

  8. #8
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    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

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    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.

  10. #10
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    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

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    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 ?

  12. #12
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    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

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    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...

  14. #14
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    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

  15. #15
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    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.

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    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

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