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 :

Utilisateur loggé ou pas


Sujet :

Struts 1 Java

  1. #1
    Eco
    Eco est déconnecté
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 32
    Par défaut Utilisateur loggé ou pas
    Bonjour,

    Je me lance dans le développement Web avec Struts. J'ai installé mon petit netBean et j'ai suivi ce tutorial : http://brabant.developpez.com/tutori...?page=partie-1

    Mais il y a quelqueschose que je ne sais pas faire. Mon site à plusieurs pages et j'aimerai qu'on puisse accéder à certaines JSP que si l'utilisateur est loggé. J'ai cherché mais étonnament je galère à comprendre comment faire.

    J'ai entendu parlé de:
    - JGuard: qui me semble un peu complexe vu que sur mon site il y a pas plusieurs niveaux d'utilisateurs (on est loggé ou on l'est pas).
    - Dans la FAQ j'ai trouvé : Comment vérifier si l'utilisateur est identifié et si sa session n'a pas expiré? Mais je ne comprend pas vraiment.

    J'ai compris que avec l'obj session on peut savoir si quelqu'un est loggé et si sa session a expirée mais comment (et ou) spécifie-t-on que pour telle page il faut être loggé et pas pour telle autre ?

    Quelqu'un aurait-il un tutorial, un exemple ?

    Merci de votre aide.

    Eco.

  2. #2
    Membre éclairé Avatar de TSalm
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Par défaut
    Salut,

    Je pense que tu peux faire le teste du log de l'utilisateur dans ton Action, puis un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return mapping.findForward("pageLog");
    il reste à ajouter dans ton struts-config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            <action
                .......
                <forward
                    name="pageLog"
                    path="/laPageDeLog.jsp"/>
            </action>

  3. #3
    Eco
    Eco est déconnecté
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 32
    Par défaut
    Merci TSalm pour ta réponse.

    Le problème avec ta méthode est que je dois ajouter ce bout de code dans chacune des pages que je souhaite "protéger".
    Ou alors de manière plus propre, faire hériter toutes mes actions d'une class qui se chargera de faire la vérification.

    Mais si j'ai des pages simples ? Sans action mais que je veux quand même restreindre l'acces aux seuls utilisateurs loggés?

    Je crois que j'ai trouvé mon bonheur avec les filtres tout simplement. Un pattern me permet de définir à quelles pages je souhaite appliquer le filtre. Et dans le filtre je peux checker si l'utilisateur est loggé. Je peux ensuite le laisser passer ou le renvoyer à la page de login selon le cas.

    Eco.

  4. #4
    zag
    zag est déconnecté
    Membre éclairé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Par défaut
    Salut,

    si tu utilises Struts et souhaites respecter un modele MVC, tu n'es pas sensé accéder directement à tes jsp. Tu peux donc dans le cas d'une page simple, utiliser org.apache.struts.actions.ForwardAction qui se chargera de forwarder vers ta jsp sans aucun traitement préalable ...

    Pour ta vérification, tu peux étendre la class ActionServlet et overrider la méthode process, dans laquelle tu feras ton controle, en fonction de la page demandée, de l'utilisateur, de la session ou de ce que tu veux ...

    Cela t'évitera d'être contraint à effectuer un héritage pour tous tes controleurs ou encore pire de mettre un bout de code pour le contrôle dans chacun d'entre eux.

  5. #5
    Eco
    Eco est déconnecté
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 32
    Par défaut
    Salut,

    Merci Zag, je pense que je vais m'inspirer de ton explication. Apparement je peux m'en sortir en étendant RequestProcessor (au lieu de ActionServlet).

    En tout cas ce petit exercice tout bête m'aura aidé à mieux comprendre ce framework et comment tout ca communique.

    Eco.

  6. #6
    Eco
    Eco est déconnecté
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 32
    Par défaut
    Bonjour à tous,

    Avant de clore le sujet je voudrais donner la solution que j'ai implémentée pour résoudre mon soucis. On sait jamais ca peu aider d'autres personnes.

    Il faut donc étendre la class TilesRequestProcessor et non RequestProcessor. Voici ce que ca donne :
    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
     
    public class AccessRequestProcessor extends TilesRequestProcessor {
        public AccessRequestProcessor() {
            super();
        }
     
        protected boolean processPreprocess (HttpServletRequest request, 
            HttpServletResponse response) {
     
            HttpSession session = request.getSession();
            if(request.getServletPath().contains("/account/")) {
                if( session != null && session.getAttribute("user") != null) {
                    return true;
                }
                else {
                    try {                  
                        request.getRequestDispatcher("/login.do").forward(request, response);
                    } catch (Exception ex) {
                    }
                    return false;
                }
            }
            return true;            
        }
    }
    Si l'utilisateur essaie d'accéder à une page contenant '/account/' dans l'url il sera redirigé vers la page de login.

    Il faut ensuite spécifier dans le struts-config.xml que l'on souhaite utiliser notre RequestProcessor et non celui part defaut. Pour cela il faut ajouter/remplacer sous </action-mappings> la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <controller processorClass="com.myapp.struts.AccessRequestProcessor"/>
    Et voila je crois que c'est tout.

    Eco.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2008] "Gérer les utilisateurs" ne fonctionne pas
    Par gifffftane dans le forum Mandriva / Mageia
    Réponses: 3
    Dernier message: 06/12/2007, 17h22
  2. Réponses: 2
    Dernier message: 25/01/2007, 16h12
  3. [ADO.Net] Utilisateur loggé choisit base de données
    Par evans dans le forum Accès aux données
    Réponses: 13
    Dernier message: 17/05/2006, 18h43
  4. L'utilisateur n'est pas asoocié à une connexion SQLServer...
    Par NotANumber dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/01/2006, 15h27

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