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

JSF Java Discussion :

page d'accueil après connexion


Sujet :

JSF Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut page d'accueil après connexion
    Bonjour !

    Je développe une application web java en JSF. J'ai un problème au niveau de l'authentification, je vous l'explique par l'exemple.

    Je suis connecté à l'application, authentifié et je navigue à la page http://sil0028520:8080/faces/pages/i...lImportCre.jsp

    Là, je laisse la session ouverte jusqu'à expiration.

    Ensuite je clique sur un lien de cette page, pour afficher une page qui s'appelle detail.jsp, mais la session est fermée. Donc la page de login s'affiche.

    Je rentre mes informations pour m'authentifier, et ensuite la page que l'application tente d'afficher est detail.jsp

    Ce qui génère une erreur puisque l'utilisateur peut atteindre detail.jsp uniquement après avoir navigué sur une autre page.

    Je ne sais pas du tout comment régler ce problème (forcer à afficher telle page après authentification), merci infiniement de m'aider.

    Très bonne après midi.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Les specs J2EE disent précisément que c'est comme çà que çà doit se passer après le login (renvoi vers la page initialement demandée).

    Ce que tu peux faire, c'est jouer avec un filtre qui forcerait (redirect) les utilisateur à aller sur une page précise immédiatement après leur login. La méthode est la suivante dans le filter:


    Si l'utilisateur a un principal non null,
    a) si l'utilisateur a un marqueur "deja_vu_loggue" dans sa session, ne rien faire de particulier, opérations normale (appliquer la suite de la filter chain)
    b) sinon, mettre ce marqueur, effectuer un redirect sur la home, et ne pas suivre la chaine.

  3. #3
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour.
    Puisque tu travailles avec JSF, l'action de login est exécuté par une action (une méthode d'un managed bean qui retourne un String).
    Il suffit alors de retourner une chaine particulière dans cette méthode, genre "LoggedIn" et déclarer un navigation rule sur cette chaine là qui dérige vers une page particulière.

    Bonne chance.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    Merci à vous deux pour vos réponses !

    Justement, l'action de login ne passe pas par une action que j'aurais développé. Et pour cause, j'utilise j_security_check qui se charge de charger la page initialement demandée.

    Je vais essayer de suivre les conseils de tchize, mais je ne sais pas si c'est possible de faire un filtre par JSF.

  5. #5
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bah JSF n'est qu'une surcouche d'une application web Java, donc rien ne t'empêche de faire un filtre ...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    Ok, j'ai réussi à faire un filtre.

    Mais comment tester et déceler le problème ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    httpServletRequest.getSession().isNew()
    rend false

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    httpServletRequest.isRequestedSessionIdValid()
    rend true


    Pour vous faire comprendre comment je procède :

    La session est fermée.
    Je vais à cette adresse :

    protocolehttp://sil0028520:8080/faces/pages/importcre/accueilImportCre.jsp

    qui est une adresse où l'uitilisateur n'a pas le droit d'aller en tant que premiere page.

    Comme la session est fermée, je me retrouve sur la page de login.

    Je me logue, je passe dans le filtre avant tout, et c'est qu'il faut que je teste quelques chose, et renvoyer la page d'accueil (faces/pages/index.jsp)

    Mais d'après les méthodes ci dessus,

    la session n'est pas nouvelle,

    La session est valide.

  7. #7
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Il faut que tu déclares toi même un champ que tu stockeras dans la session. Tu l'initialises à true par exemple juste après le login pour que le filtre redérige vers ta page et il est ensuite mis à false pour que le filtre ne redérige plus.

    Bonne chance.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pour savoir si un utilisateur est déjà passé par le login (attention que ce soit immediatement maintenant ou il y a 10 minutes), il faut regarder regarder sir request.getUSerPrincipal() renvoi un non-null.

    Dans ce cas, t'as plus qu'à dterminer dans ton filtre si c'est, oui ou non, la première fois depuis le login qu'on demande une page (pour ce faire tu crée un marqueur toi même sous forme d'un clé+valeur dans la session). Si c'est la première fois -> zou redirect vers la home page. Sinon, on laisse l'opération se faire tranquillement...

    Après à toi d'ajuster à ton gout le code pour que çà se fasse peut etre seulement sur certaines pages ou que çà redirige ailleurs que sur la home page, etc...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    Hello !
    Tout d'abord, merci pour votre soutient, vos réponse sont précieuses.
    Je suis bien d'accord avec vos réponses.

    En fait le plus simple pour moi, c'est, avant de demander telle page, de vérifier si une certaine liste, stockée dans un managed bean, est nulle ou pas.

    Si elle est nulle, direction la page d'accueil, si elle n'est pas nulle, on lui donne la page qu'il veut pour afficher cette liste.

    A priori c'est simple, mais voilà mon problème, je dois récupérer un managed bean, dans la méthode doFilter, j'utilise cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    protected Object lookup(String key) {
     
    FacesContext facesContext = FacesContext.getCurrentInstance();
    Application application = facesContext.getApplication();
    ValueBinding valueBinding = application.createValueBinding(key);
     
    return valueBinding.getValue(facesContext);
    }
    Mais facesContext est nul, je ne sais pas pourquoi, donc impossible pour moi de récupérer mon managed bean ....
    Y a til d'autres moyens pour récupérer un managed bean ?
    Je précise que dans mes actions, récupérer un managed bean de cette manière ne me pose aucun problème.

    Merci beaucoup

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    En fait la question c'est : Comment récupérer un managed bean dans un Filter ??

    Merci

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    Bon, en fait je ne savais pas qu'on pouvait aussi récupérer un managed bean comme ça :

    session.getAttribute("nomDuBean");


    Je passais toujours par FacesContext

    Merci

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tant que t'es dans le filtre, y a pas de FacesContext dispo, pour information. Par contre, rien ne t'empeche de créer le faces contexte dans le filtre, qui sera par la suite utilisé par le servlet jsf. Y a des docs sur le net sur "comment accéder aux managed beans depuis un filtre"

  13. #13
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Citation Envoyé par tchize_
    tant que t'es dans le filtre, y a pas de FacesContext dispo, pour information. Par contre, rien ne t'empeche de créer le faces contexte dans le filtre, qui sera par la suite utilisé par le servlet jsf. Y a des docs sur le net sur "comment accéder aux managed beans depuis un filtre"
    Hello,

    Est ce que tu aurais un pointeur vers ces docs dont tu parles?

    Merci d'avance,
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  14. #14
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806

  15. #15
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Merci tchize_!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


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

Discussions similaires

  1. [PrestaShop] Page d'accueil après un changement de thème
    Par sophieds dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 27/12/2017, 01h16
  2. Revenir à la page précédente après connexion
    Par DiverSIG dans le forum Langage
    Réponses: 3
    Dernier message: 16/10/2009, 18h12
  3. Page d'accueil connexion échouée
    Par BAZ187REM dans le forum Installation
    Réponses: 0
    Dernier message: 30/09/2008, 22h24
  4. Retour à la même page après connexion
    Par bruburque dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2007, 16h38
  5. Comment retourner à sa page apres connexion?
    Par feti2004 dans le forum Langage
    Réponses: 5
    Dernier message: 03/04/2006, 09h46

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