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 :

obliger de passer sur une page


Sujet :

JSF Java

  1. #1
    Membre actif Avatar de Elwe31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 487
    Points : 220
    Points
    220
    Par défaut obliger de passer sur une page
    Bonjour,

    je pense qu'il y a beaucoup de moyen, mais comme je suis debutant, je pose la question.

    l'utilisateur doit etre obliger de passer par une page en arrivant sur le site avec une cocher la case "lu et approuvé". une fois qu'il l'a coché pendant la session il n'en a plus besoin.
    Je pense qu'il faut un bean avec un boolean dans la session, mais comment s'en servir pour rediriger l'utilisateur ? une servlet ? autre ?

    merci pour vos conseils

  2. #2
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juillet 2015
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juillet 2015
    Messages : 62
    Points : 82
    Points
    82
    Par défaut
    Bonjour Elwe31

    Effectivement tu as plusieurs possibilités pour faire ce travail.
    Pour ma part je pense que le plus simple est de faire un filter qui va être exécuté à chaque fois que l'utilisateur va faire une demande de page.
    Dans ce filter tu peux faire une récupération de la session utilisateur et puis tu tente de voir si elle est valorisée.

    Tu n'a pas forcement besoin de créer un booléen pour y stocker l'état de la connexion de l'utilisateur vu que, je pense, tu va déjà stocker ses informations de compte.

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
        UserAccount userAccount = (UserAccount )((HttpServletRequest)request).getSession().getAttribute("userAccount");
     
        // Je pars du principe que ton bean qui sert à stocker les informations de ton utilisateur s'appelle UserAccount
        // et qu'il sera sauvegardé en session quand l'utilisateur se connectera
        if (userAccount == null) {
            String contextPath = ((HttpServletRequest)request).getContextPath();
            ((HttpServletResponse)response).sendRedirect(contextPath + "/login.xhtml");
        }
     
            chain.doFilter(request, response);
    }
    C'est un exemple très sommaire mais qui peut être customisé à souhait.
    La javadoc : https://docs.oracle.com/javaee/7/api...et/Filter.html

  3. #3
    Membre actif Avatar de Elwe31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 487
    Points : 220
    Points
    220
    Par défaut
    Merci pour ta réponse.

    Non pas d'info de compte dans mon appli. un bean [user] qui stocke 2/3 info (a-t-il valider sa page, et option qu'il a sélection plus long)
    doFilter, C'est une méthode d'une servlet ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Elwe31 Voir le message
    doFilter, C'est une méthode d'une servlet ?
    Non, de l'interface javax.servlet.Filter (dont @L4goon t'a donné le lien vers la JavaDoc). Le but du filtre est justement de ne pas polluer une servlet pour faire un traitement systématique d'ordre général (comme un login, ou l'affichage d'une page d'accueil tant qu'on n'a pas dit qu'on ne voulait plus la voir..., ou l'encodage, ou le blocage de certaines méthodes, etc.)

  5. #5
    Membre actif Avatar de Elwe31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 487
    Points : 220
    Points
    220
    Par défaut
    Merci, beaucoup
    je vais aller voir

  6. #6
    Membre actif Avatar de Elwe31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 487
    Points : 220
    Points
    220
    Par défaut
    Je viens de faire un test et mon navigateur me dit : ERR_TOO_MANY_REDIRECTS pour la page /contrat.jsf


    Voila mon filtre :
    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
    public class FiltreContrat implements Filter   {
    	private FilterConfig filterConfig = null;
    	private String pageContrat;
     
    	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     
    		User u = (User )((HttpServletRequest)request).getSession().getAttribute("user");
     
    	   	//User u = (User)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user");
    		pageContrat = "/contrat.jsf";
    		MyLog4j.logger.debug(pageContrat);
     
    		String contextPath = ((HttpServletRequest)request).getContextPath();
     
    		if (u==null) {((HttpServletResponse)response).sendRedirect(contextPath + pageContrat);}
    		else {
    			if (!u.isStatutContrat()) {
    		        ((HttpServletResponse)response).sendRedirect(contextPath + pageContrat);
    		    }
    		}
     
    	        chain.doFilter(request, response);
    	}
     
    	@Override
    	public void destroy() {
    		// TODO Auto-generated method stub
    		this.filterConfig = null;
    	}
     
    	@Override
    	public void init(FilterConfig arg0) throws ServletException {
    		// TODO Auto-generated method stub
    		MyLog4j.logger.debug("FiltreContrat init");
    		this.filterConfig = arg0;
    	}
     
     
    }
    et dans la console, j'ai un paquet de ligne de retour comme si cela bouclait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MyLog4j.logger.debug(pageContrat);
    et si j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    User u = (User )((HttpServletRequest)request).getSession().getAttribute("user");
    J'ai une exeption :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.lang.NullPointerException
    	com.site.filters.FiltreContrat.doFilter(FiltreContrat.java:26)
    mes beans sont déclarés dans le face-config.xml

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Elwe31 Voir le message
    Je viens de faire un test et mon navigateur me dit : ERR_TOO_MANY_REDIRECTS pour la page /contrat.jsf
    Il faut penser à ne pas faire la redirection si la page visée est déjà celle vers laquelle tu rediriges. Sinon, forcément, ça boucle.

  8. #8
    Membre actif Avatar de Elwe31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 487
    Points : 220
    Points
    220
    Par défaut
    évidement !
    merci pour le temps passé.

    Mais il y a un petit truc que je ne comprends pas quand je regarde l'exemple ici : http://www.jguru.com/article/server-...a-request.html

    Il n'y a pas de test pour savoir si la page n'est pas celle souhaitée. et il utilise foward et chain.doFilter.
    J'ai fait le test, l'exemple fonctionne nickel.

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    On peut gérer ça par le url-pattern dans la configuration du filtre. Si la page vers laquelle on redirige ne matche pas le pattern, alors le filtre n'est pas appliqué.

  10. #10
    Membre actif Avatar de Elwe31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 487
    Points : 220
    Points
    220
    Par défaut
    Ok. Mais je ne vois pas ou cela est fait dans l'exemple?

    Et je peux écarter du filtre une partie du site ?
    Exemple: /public/* ?

    Il semblerai aussi que le (User) session.getAttribute("user"); ne soit pas le meme que celui que j'utilise dans ma page ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <p:selectBooleanButton id="value1" value="#{user.statutContrat}" onLabel="Yes" offLabel="No" style="width:60px" valueChangeListener="#{user.handleChange()}"/

Discussions similaires

  1. [XL-2010] Faire une recherche sur une page web d'élément texte sans passer par le code source
    Par Phifou dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 18/09/2014, 11h19
  2. Savoir le temps passé sur une page avant de passer vers une autre page
    Par karimphp dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/09/2007, 23h57
  3. Lien simple amenant sur une page détaillée....
    Par Ovide dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/08/2004, 11h34
  4. application qui connecte sur une page web
    Par spoolz dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 14/04/2004, 09h47
  5. [RaveReport] - Bloquer groupe sur une page
    Par muaddib dans le forum Rave
    Réponses: 3
    Dernier message: 25/02/2003, 16h21

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