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 :

Retrouver l'URL demandée avant redirection sur login


Sujet :

JSF Java

  1. #1
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut Retrouver l'URL demandée avant redirection sur login
    Bonjour,

    Dans mon appli, j'ai un filtre qui permet de rediriger un utilisateur sur la page de login s'il n'est pas encore connecté.
    Ce que j'aimerais, c'est qu'une fois qu'il s'est connecté, il soit automatiquement redirigé sur la page qu'il avait demandé à la base.

    Pour cela, j'ai vu qu'il fallait utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ExternalContext externalContext = FacesContext.getCurrentInstance()
    				.getExternalContext();
     
    		String originalURL = (String) externalContext.getRequestMap().get(
    				RequestDispatcher.FORWARD_REQUEST_URI);
    Le problème est que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    externalContext.getRequestMap().get(
    				RequestDispatcher.FORWARD_REQUEST_URI);
    me renvoie toujours null.

    Est-ce que j'aurais oublié qqch ? Ou Est-ce que mon appli est mal configurée ?
    Merci d'avance pour votre aide

  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
    FORWARD_REQUEST_URI s'applique quand tu fais un forward, pas quand tu fais un redirect. Si tu veux capter la reqûete d'origine, il faut la stocker toi même dans ton filtre avant de faire le redirect.

  3. #3
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Ha oui ça marche bien.
    Pour être sûr de procéder d'une manière correcte, voici ce que j'ai fais :

    Dans mon filtre, j'ai simplement récupéré l'adresse et l'ai transmise en paramètre à la session:
    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
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            // Get the loginBean from session attribute
            Utilisateur loginBean = (Utilisateur) ((HttpServletRequest) request).getSession().getAttribute("user");
             
            // For the first application request there is no loginBean in the session so user needs to log in
            // For other requests loginBean is present but we need to check if user has logged in successfully
            if (loginBean == null) {
                String contextPath = ((HttpServletRequest) request).getContextPath();
                String adresseInitiale = ((HttpServletRequest) request).getServletPath();
                
                HttpSession session = ((HttpServletRequest) request).getSession();
                session.setAttribute(ConnexionForm.PARAM_URL_ORIGINALE, adresseInitiale);            
                ((HttpServletResponse) response).sendRedirect(contextPath + IUrlLocation.URL_LOGIN);
            }
             
            chain.doFilter(request, response);
        }
    Dans le ManagedBean de mon formulaire de connexion, dans la méthode d'authentification, j'ai fais ceci:
    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
    
    public static final String PARAM_URL_ORIGINALE = "urlOriginale";
    
    public void authenticate() throws IOException {
    		FacesContext context = FacesContext.getCurrentInstance();
    		ExternalContext externalContext = context.getExternalContext();
    
    		try {
    			Utilisateur user = m_utilisateurDao.getUtilisateur(this.login, this.password);
    			
    			if (user != null) {
    				HttpSession session = ((HttpServletRequest) externalContext
    						.getRequest()).getSession();
    				session.setAttribute("user", user);
    
    				if (isRemembered()) {
    					CookieHelper.setCookie(COOKIE_USERNAME, login, 60 * 60 * 24 * 365); // 1 année
    					CookieHelper.setCookie(COOKIE_REMEMBER_ME, Boolean.TRUE.toString(), 60 * 60 * 24 * 365); // 1 année
    				} else {
    					CookieHelper.setCookie(COOKIE_USERNAME, "xsxs", 0);
    					CookieHelper.setCookie(COOKIE_REMEMBER_ME, Boolean.FALSE.toString(), 0);
    				}
    
    				String urlOriginale = (String) session.getAttribute(PARAM_URL_ORIGINALE);
    				if (Strings.isNullOrEmpty(urlOriginale)) {
    					urlOriginale = IUrlLocation.URL_ACCUEIL;
    				}
    				
    				urlOriginale = externalContext.getRequestContextPath() + urlOriginale;
    				
    				externalContext.redirect(urlOriginale);			}
    			 
    			 throw new Exception(getMessage(FacesMessage.SEVERITY_ERROR).getSummary());
    		} catch (Exception e) {
    	        context.addMessage(null, new FacesMessage(e.getMessage()));
    	    }
    	}
    L'url accueil étant déclaré dans une interface:
    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
    public interface IUrlLocation {
    
    	public static final String URL_LOGIN = "/connexion/login.xhtml";
    	public static final String URL_OUBLI_LOGIN = "/connexion/oubliLogin.xhtml";
        
        public static final String URL_ACCUEIL = "/secured/divers/accueil.xhtml";    
        public static final String URL_GESTION_SOCIETES = "/secured/parametrage/gestion/gestionSocietes.xhtml";
        public static final String URL_GESTION_DEPARTEMENTS = "/secured/parametrage/gestion/gestionDepartements.xhtml";
        public static final String URL_GESTION_DOMAINES_INTERVENTION = "/secured/parametrage/gestion/gestionDomainesIntervention.xhtml";
        public static final String URL_GESTION_USERS = "/secured/parametrage/gestion/gestionUtilisateurs.xhtml";
        public static final String URL_GESTION_EMPLOYES = "/secured/parametrage/gestion/gestionEmployes.xhtml";
        public static final String URL_GESTION_DOSSIERS = "/secured/parametrage/gestion/gestionDossiers.xhtml";
        
        public static final String URL_SAISIE_HEURES = "/secured/heures/saisieHeures.xhtml";
    }
    Est-ce bien correct de procéder ainsi ?
    Merci beaucoup pour ton aide très précieuse quand on se lance là-dedans

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Tu te compliques un peu la vie là, tu peux récupérer les informations d'origine via request, ci-dessous ce que je fesais dans une application struts (à adapter un peu)
    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
    String url = request.getRequestURL().toString();
    String query = request.getQueryString();
    String callingURL = "";
    if (url != null)
    {
        callingURL = url;
        if (query != null)
        {
            callingURL += "?" + query;
        }
        else
        {
            callingURL += "?methodName=redisplay";
        }
    }
    Tu n'as plus qu'à omettre la valeur spéciale de ta page de login à ce traitement et tu récupéreras l'url d'orignie

    Maintenant, je ne peux que te conseiller d'utiliser une authentification JAAS dans tes applications, tu n'auras plus à te soucier de ce genre de traitement...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    hello,

    Ok merci :-)
    Je vais me pencher sur cette authentification JAAS.

    Merci pour le conseil

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/03/2009, 17h05
  2. Réponses: 7
    Dernier message: 19/03/2008, 16h07
  3. Redirection erreur 404 => récupérer url demandée
    Par Le_PounK dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 21/03/2007, 16h32
  4. redirection sur un double clic avec url variable
    Par arnolpourri dans le forum Langage
    Réponses: 2
    Dernier message: 08/06/2006, 10h57

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