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 :

Redirection vers une page


Sujet :

JSF Java

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut Redirection vers une page
    bonjour tout le monde
    j'ai un problème avec la page welcome 'page d’accueil ' avec login si le nom et mot de passe correct alors rediriger vers la page welcome.xhtml
    je vous montre code source de l'application
    web.xml
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    <?xml version="1.0"?>
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
     
     
      <display-name>mus</display-name>
    <welcome-file-list>
        <welcome-file>welcome.xhtml</welcome-file>
    </welcome-file-list>  
     <servlet>
                <servlet-name>Faces Servlet</servlet-name>
                <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
                <load-on-startup>1</load-on-startup>
            </servlet>
            <servlet-mapping>
                <servlet-name>Faces Servlet</servlet-name>
                <url-pattern>*.xhtml</url-pattern>
            </servlet-mapping>
     <filter>
        <filter-name>LogFilter</filter-name>
        <filter-class>
            LoginFilter
        </filter-class>
     
    </filter>
    <filter-mapping>
        <filter-name>LogFilter</filter-name>
        <url-pattern>/test/*</url-pattern>
    </filter-mapping>
     	
     
    <security-constraint> 
        <web-resource-collection> 
              <web-resource-name>security</web-resource-name>
                <description>Declarative security tests</description>
                <url-pattern>/test/*</url-pattern>
                <http-method>HEAD</http-method>
                <http-method>GET</http-method>
                <http-method>POST</http-method>
                <http-method>PUT</http-method>
                <http-method>DELETE</http-method>
     </web-resource-collection> 
     
        <auth-constraint>
       <role-name>admin</role-name>
      </auth-constraint>
    </security-constraint> 
     
    <login-config> 
        <auth-method>FORM</auth-method> 
        <realm-name>MyDomain</realm-name>
        <form-login-config> 
            <form-login-page>/test/entrer.xhtml</form-login-page> 
            <form-error-page>/test/erreur.xhtml</form-error-page> 
        </form-login-config> 
    </login-config>
     
    <security-role>
      <role-name>admin</role-name>
     </security-role>
    <session-config>
    <session-timeout>1</session-timeout>
    </session-config>
     
    </web-app>
    et la page entrer.xhtml

    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:ui="http://java.sun.com/jsf/facelets">
     
    	   <h:head>
            <title>Login page</title>
        </h:head>
        <h:body>
     
            <h1>Login page</h1>
     
            <form method="post" action="j_security_check">
                Login<br/>
                <h:inputText id="j_username" label="Login" required="true"/>
                <br/>Password<br/>
                <h:inputSecret id="j_password" label="password" required="true"/>
                <br/><h:commandButton value="Valider"  action="#{User.authenticate()}"/>
            </form>
        </h:body>
    </html>
    je voudrais savoir comment je peu rediriger le résultat de l’exécution de cette action"http://localhost:8080/mus/test/voir.xhtml" vers la page welcome.xhtml.

    merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 23
    Par défaut
    Dans ta méthode User.authenticate() tu dois rajouter ça à la fin :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
    				externalContext.redirect(externalContext
    						.getRequestContextPath() + "/member/dashboard.xhtml");

    PS: dans cet exemple les pages dans utilisateur connecté sont dans le dossier member/

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Par défaut
    A tester tu peux aussi juste retourner la page que tu veux appeler dans le retour de ta méthode User.authenticate()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(authenticate)
    return "/member/dashboard.xhtml";
    PS : Fonctionne uniquement pour la version 2.x de JSF

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    j'ai créé un dossier qui contient la page welcome.xhtml et j'ai créer une méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     public void logOut() {
    		 try {
     
     
    		 ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
     
    		 FacesContext.getCurrentInstance().getExternalContext().redirect(externalContext.getRequestContextPath() + "/member/welcome.xhtml");
    		 } catch (IOException ex) {
    		 System.out.println("UserSessionBean - IOException: " + ex.toString());
    		 }
    		 }
    et dans ma page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <br/><h:commandButton value="Valider"  action="#{User.logOut()}"/>
    mais toujours même chose

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Par défaut
    Tu as essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public String logOut() {
     
            return "/welcome.xhtml"; 
    }
    ?

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    c'est toujours la même chose

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Par défaut
    Alors le problème dans ton projet c'est que tu n'a pas les bibliothèques java de JSF dans ton projet ... c'est embetant quand tu veux faire du JSF

    Pour résourdre ton problème de redirection :
    1 - Tu télécharge et rajoute dans ton répertoire lib les deux jar de JSF que tu peux télécharger ici :

    http://repo1.maven.org/maven2/com/su...impl-2.2.1.jar

    http://repo1.maven.org/maven2/com/su...-api-2.2.1.jar

    2 - Sur ton formulaire tu retire l'inutile et tu rajoute bien le préfix "h" sur ton form

    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:ui="http://java.sun.com/jsf/facelets">
     
    	   <h:head>
            <title>Login page</title>
        </h:head>
        <h:body>
     
            <h1>Login page</h1>
     
            <h:form method="post">
                Login<br/>
                <h:inputText label="Login" />
                <br/>Password<br/>
                <h:inputSecret label="password" />
                <br/><h:commandButton value="Valider"  action="#{User.logOut}"/>
            </h:form>
        </h:body>
    </html>
    3 - puis dans ton bean tu peux exploiter les redirections par retour :

    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
     
    import javax.faces.bean.*;
     
    @ManagedBean(name="User")
    @RequestScoped
    public class User {        
    	private String nom;  
    	private String host;
     
    	 public String getHost() {
    		return host;
    	}
     
    	public void setHost(String host) {
    		this.host = host;
    	}
     
    	public String getNom() {	 
    	 return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public String logOut(){
    		System.out.println("In Logout Method");
    		return "/logout.xhtml";
    	}
    }
    J'ai crée un page logout.xhtml au niveau de ta page nabil.xhtml juste pour tester :

    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:ui="http://java.sun.com/jsf/facelets">
     
    	   <h:head>
            <title>Login page</title>
        </h:head>
        <h:body>
     
            <h1>Redirection work !</h1>
     
        </h:body>
    </html>
    Pour moi fonctionne parfaitement


    PS Au passage tu n' a pas besoin de faire de mapping dans ton fichier faces-config si tu utilise la version 2.X de jsf .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="UTF-8"?>
    <faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xi="http://www.w3.org/2001/XInclude"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
     
    </faces-config>

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    toujours la même choses
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:ui="http://java.sun.com/jsf/facelets">
     
    	   <h:head>
            <title>Login page</title>
        </h:head>
        <h:body>
     
            <h1>Login page</h1>
     
            <form method="post" action="j_security_check">
                Login<br/>
                <h:inputText id="j_username" label="Login" required="true"/>
                <br/>Password<br/>
                <h:inputSecret id="j_password" label="password" required="true"/>
                <br/><h:commandButton value="Valider"  action="#{User.logOut}"/>
            </form>
        </h:body>
    </html>

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Par défaut
    Met bien les balises comme il faut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       <h:form method="post">            Login<br/>
                <h:inputText label="Login" />
                <br/>Password<br/>
                <h:inputSecret label="password" />
                <br/><h:commandButton value="Valider"  action="#{User.logOut}"/>
            </h:form>

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    mais j'utilise <form method="post" action="j_security_check">

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Je n'ai pas compris ton problème exactement, peux-tu préciser ce qui coince ?

    En attendant, voici quelques constatations / explications, au cas où :

    Il y a déjà un truc pas normal, tu utilises une contrainte de sécurité sur tout ce qui contient "/test/*" dans le chemin. Hors, ta page de login y est, ça risque d'être compliqué d'y accéder sans être connecté...

    Si je comprend bien, tu as une authentification type JAAS. Donc, tu n'appelles pas directement la page de login, c'est en faisant référence à une page protégée que tu l'auras. Pour déconnecter l'utilisateur, il suffira d'invalider la session HTTP.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Je n'ai pas compris ton problème exactement, peux-tu préciser ce qui coince ?

    En attendant, voici quelques constatations / explications, au cas où :

    Il y a déjà un truc pas normal, tu utilises une contrainte de sécurité sur tout ce qui contient "/test/*" dans le chemin. Hors, ta page de login y est, ça risque d'être compliqué d'y accéder sans être connecté...

    Si je comprend bien, tu as une authentification type JAAS. Donc, tu n'appelles pas directement la page de login, c'est en faisant référence à une page protégée que tu l'auras. Pour déconnecter l'utilisateur, il suffira d'invalider la session HTTP.

    quelque soit la page demandé la page login s'ouvre et une fois l'utilisateur est just alors redirigé vers la page test.xhtml

  13. #13
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Mais ce n'est pas le fonctionnement de l'authentification par le conteneur ça...
    Tu demandes une page, l'authentification est automatiquement appelée, et quand elle est bonne, la page initialement demandée est affichée.

    Tu voudrais systématiquement passer par test.xhtml ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    oui je voudrais passer par test.xhtml

  15. #15
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    A ma connaissance, ce n'est pas possible avec ce type d'authentification...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Membre très actif Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Par défaut
    En fait tu utilises la sécurité JAAS de type Form.
    Cela veut dire que tu n'as pas besoin de mettres une méthode dans la backing Bean pour la connexion.
    Donc ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <h:commandButton value="SUBMIT" type="submit"  />
    ensuite dans ton web.xml tu définies les pages de connexion et la redirection en cas d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      <login-config>
            <auth-method>FORM</auth-method>
            <realm-name>nomDuRealm</realm-name>
            <form-login-config>
                <form-login-page>/login.xhtml</form-login-page>
                <form-error-page>/errorLogin.xhtml</form-error-page>
            </form-login-config>
        </login-config>
    Vu que le container est responsable de redirection des pages,ma petite stratégie consiste à definir la page d'acceuil autres que la page de connexion.
    Comme ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <welcome-file-list>
            <welcome-file>index.xhtml</welcome-file>
        </welcome-file-list>
    La redirection est automatique aussi car le container redirige aussi l'utilisateur sur la page de la dernière tentative de connexion.

    Vu que c'est assez long d'expliquer tu dois faire des recherches que l'implementation de JAAS+JSF+Glassfish

    voici un livre interressant http://www.cultura.com/developpement...746062634.html

    Une autre solution plus simple consiste à ne pas utiliser JAAS et de gerer l'authentification soit même.

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/01/2006, 21h33
  2. [Tomcat] session expirée redirection vers une page
    Par Casp dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 19/01/2006, 11h45
  3. redirection vers une page internet
    Par chti_juanito dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 09/01/2006, 17h42
  4. Redirection vers une page contenant celle qui redirectionne
    Par Rémiz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 16/11/2005, 14h38
  5. [PRO] redirection vers une page
    Par Mister_FX dans le forum ASP
    Réponses: 10
    Dernier message: 23/06/2004, 17h31

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