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 :

login, logout, page sécurisée


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    ----
    Inscrit en
    Février 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Février 2005
    Messages : 27
    Par défaut login, logout, page sécurisée
    Bonjour,

    je recherche désespérément un exemple de code jsf avec les fonctionnalités suivantes :

    - une page de login, si la connexion est ok on est redirigé sur une (des) page(s) sécurisée(s) qui ne peut pas être atteinte si l'on est pas logué. puis une méthode pour se déloguer afin que l'on ne puisse plus accéder à la page sécurisée.

    J'ai fait pas mal le tour de sites concernant ma question, mais je tombe toujours sur des exemples hyper complexes, et pour ma part je souhaite avoir un exemple simple.

    merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    As-tu cherché du côté des filtres?

    Lorsque tu configures un filtre dans ton application , ce dernier est appelé à chaque load d'une page. Tu peux ainsi définir tes règles de filtre et en fonction rediriger.

    Tu peux par exemple dans ton filtre , vérifier si il existe un objet dans la session. Cet objet tu l'initialise seulement par la page de login.

    Donc si il est présent , ok il peut acceder à la page.

    Sinon tu redirige vers la page de login.

    Je n'ai pas d'exemple sous la main mais je sais que netbeans te propose d'en creer très facilement.

  3. #3
    Membre chevronné Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Par défaut
    1 - Utilises JAAS
    2 - La page de login est un formulaire qui pointe vers une servlet d'authentification de ton serveur d'app.
    4 - c'est dans le web.config que tu détermines les règles d'accès et la page de login.
    5 - Une fois connecté tu sais qui est connecté grâce à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
    6 - Pour te déconnecter tu peux invalider la session avec 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
    /**
             * Déconnecte l'utilisateur par invalidation de la session
             * 
             * @return rien
             */
    	public String doLogOut() {
    		FacesContext context = FacesContext.getCurrentInstance();
    		ExternalContext ec = context.getExternalContext();
     
    		final HttpServletRequest request = (HttpServletRequest) ec.getRequest();
    		request.getSession(false).invalidate(); // on invalide
     
    		return "LogOut";
     
    	}
    7 - Pour gérer tes utilisateur c'est avec ton serveur que tu gères cela, je suis sous Weblogic, je l'ai connecté à un annuaire ldap, c'est weblogic qui gère l'authentification.
    8 - Pour les rôles dans tu peux les intégrer dans ton projet ou les faire gérer par ton serveur d'application. Pour savoir si un utilisateur appartient à un rôle utilises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FacesContext.getCurrentInstance().getExternalContext().isUserInRole(roleName);
    9 - Je te laisse le soin de rechercher dans les ancien post car j'ai déjà expliqué le concept au moins 3 fois.

  4. #4
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par heid Voir le message
    9 - Je te laisse le soin de rechercher dans les ancien post car j'ai déjà expliqué le concept au moins 3 fois.
    Un bon candidat pour la FAQ dans ce cas

    Si tu le veux bien heid, je te propose d'ajouter une proposition de Q/R dans le thread de participation à la FAQ JSF. Mais sinon, je peux essayer de voir tes posts et d'en extraire quelque chose....

  5. #5
    Membre chevronné Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Par défaut
    Oui c'est clair ce serait même un candidat pour un article, j'avoue être débordé en ce moment donc "wait 4 it" si tu vois ce que je veux dire...

  6. #6
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par heid Voir le message
    ... donc "wait 4 it" si tu vois ce que je veux dire...

  7. #7
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    si tu ne veux pas utiliser JAAS, ou l'authentification via le conteneur CSM .(Container Security Management )


    pour gerer le logout:

    tu peux faire un button dans l'action est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public String disconnect() {		
    FacesContext context = FacesContext.getCurrentInstance().getCurrentInstance();	
    HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
    session.invalidate();
    return "logOut";
    }
    et dans les navigations rules définir redirigé vers la page souhaité

    -Pour gerer le cas de session time out

    en JSF 1.2 la réponse est simple:
    lors de l'expiration de session uen exception est lancé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.faces.application.ViewExpiredException
    il suffit de définir dans le web xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     <error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
      <location>/exp_session.jsp</location>
     </error-page>
    NB: je ne sais pas si une page JSF fonctionne ici..!!

    en JSF 1.1 j'avais une solution en richfaces, à l'aide de <a4j:poll/>,
    si tu t'utilises richfaces, je te donne la solution complete..

    je prépare la réponse dans la FAQ après avoir bien testé le cas de redirection vers une page JSF dans le web.xml..

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par djo.mos Voir le message
    Un bon candidat pour la FAQ dans ce cas

    Si tu le veux bien heid, je te propose d'ajouter une proposition de Q/R dans le thread de participation à la FAQ JSF. Mais sinon, je peux essayer de voir tes posts et d'en extraire quelque chose....
    au fait pour JAAS, il existe des explications dans la FAQ Java EE

  9. #9
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    je me suis avancé un peu trop vite pour la gestion de l'expiration de session..surtout avec JSF 1.2, l'exception ViewExpiredException n'est pas envoyé au serveur d'application, je ne sais pas si c'est un problème de tomcat/my faces/. ou richFaces.

    avec la version myfaces 1.1.5 et richfaces 3.1.4 et facelets 1.1.14 j'utilisais la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <a4j:region>
    		<script type="text/javascript">
                            A4J.AJAX.onExpired = function(loc, expiredMsg) {
                                Richfaces.showModalPanel('sessionExpiredPanel',{width:450, top:200});;
                            };
                        </script>
    		<a4j:form>
    			<a4j:poll id="sessioncheck" interval="182000" reRender="sessioncheck" />
    		</a4j:form>
    	</a4j:region>
    en passant à myfaces 1.2.2 et richfaces 3.2.0 , impossible de gerer correctement l'expiration de session..(avec mon environnement du moins)
    l'erreur suivant s'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.servlet.ServletException: viewId:/richfaces/dataTable.jsf - View /richfaces/dataTable.jsf could not be restored.
    le problème sera reglé dans le prochain release de richfaces, néanmoins, en attendant, j'ai trouvé une solution:
    redefinir la classe FaceletsViewHandlers: et redefinir les methodes:

    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
     
     
    public UIViewRoot restoreView(FacesContext context, String viewId) {
    		UIViewRoot viewRoot = super.restoreView(context, viewId);
    		if (viewRoot == null) {
    			viewRoot = createView(context, viewId);
    			context.setViewRoot(viewRoot);
    			try {
    				this.buildView(context, viewRoot);
    				context.getExternalContext().getRequestMap().put("session.viewBuilt", getRenderedViewId(context, viewId));
    			} catch (IOException ioe) {
    				log.log(java.util.logging.Level.SEVERE, "Error Building View", ioe);
    			}
    		}
    		return viewRoot;
    	}
     
     
     
    /*on fait le build view si cela n'a pas été fait..*/
     
    	protected void buildView(FacesContext context, UIViewRoot viewToRender) throws IOException, FacesException {
     
    		String viewId = getRenderedViewId(context, viewToRender.getViewId());
    		String viewBuilt = (String) context.getExternalContext().getRequestMap().get("session.viewBuilt");
     
    		if (viewBuilt == null || !viewId.equals(viewBuilt)) {
    			super.buildView(context, viewToRender);
    		} else {
                           /** cas ou session expire **/
    			HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();		   			
    			response.sendRedirect("login.jsf");
    		}
     
    	}

Discussions similaires

  1. Login - logout nouvelle fenetre "page not found"
    Par sperron dans le forum ASP
    Réponses: 1
    Dernier message: 24/01/2007, 22h11
  2. login-logout session asp et javascript
    Par sperron dans le forum ASP
    Réponses: 3
    Dernier message: 15/12/2006, 15h56
  3. https page sécurisée
    Par aityahia dans le forum Coldfusion
    Réponses: 11
    Dernier message: 07/12/2006, 00h03
  4. [Sécurité] Login/logout
    Par kastha dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2006, 03h14
  5. [apache][htaccess]Problème de pages sécurisées
    Par Mel68 dans le forum Apache
    Réponses: 5
    Dernier message: 09/06/2004, 11h53

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