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.jsp security et web.xml


Sujet :

JSF Java

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Par défaut login.jsp security et web.xml
    bonjour a tous,

    Voila, j'ai mis en place une authentifiacation sur une application existante.

    La page de login marche super bien.
    seulement si je met directement l'url de la page sur laquelle on accede normalement apres le login, la page s'affiche sans que je soit logé.

    comment faire pour plus que ca puisse s'affiché sans qu'on se soit logé ?
    faut il faire une liste des pages qu'on veut protegé quelque part ?
    ou mettre un script dans l'entete de chaque page et/ou servelet ?

    je vous serais extremment reconnaissant si vous me repondiez car je suis bien embeté.

  2. #2
    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
    Regardes du coté des server filters.
    Utilises un répertoire "restricted" ou toutes tes pages ont un accès limité, dans ton server filter tests si la page demandée contient "resticted" dans l'url. Si tel est le cas ne transmet pas la demande aux autres filtres et renvoi une page d'erreur.
    exemple (avec en plus une gestion de la session d'un utilisateur connecté) :

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    package fr.dvp.cleanjsf.presentation.security;
     
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;
     
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
     
    import org.omg.CORBA.Request;
     
    import fr.dvp.cleanjsf.metier.User;
    import fr.dvp.cleanjsf.tools.Config;
     
    public class RestrictedFilter implements Filter {
     
     
     
     
     
    	public void destroy() {
    		// TODO Auto-generated method stub
     
    	}
     
     
     
     
     
     
    	public void doFilter(ServletRequest arg0, ServletResponse arg1,
    			FilterChain arg2) throws IOException, ServletException {
     
    		//System.out.println("ENTRE");
     
    		boolean isGranted = true;
     
    		if (arg0 instanceof HttpServletRequest) {					
    		      HttpServletRequest request = (HttpServletRequest) arg0;
    		      if   ( request.getRequestURL().toString().indexOf(Config.RESTRICTED_FOLDER_NAME)>=0)
    		      {
    		    	  // si la demande concerne un répertoire dont l'accès est réservé
    		    	  Object unUser = request.getSession().getAttribute(Config.SESSION_USER_CONNECTED);
    		    	  if ((unUser!= null) && ( ((User)unUser).isEstConnecte()))
    		    	  {
    		    		  // accès autorisé		    		  		    		
    		    	  }
    		    	  else
    		    	  {
     
    		    		  //System.out.println("Accès refusé");
    		    		  isGranted = false;
    		    		  PrintWriter pw = arg1.getWriter();
    		    		  pw.write("<html><body>Accès refusé<script language=\"JavaScript\">location.href='"+Config.URL_LOGIN_PAGE+"';</script></body></html>");
     
    		    		  pw.flush();
    		    	  }		    	  
    		      }		      		     
    		      //System.out.println(request.getRequestURL().toString());			     
    		    } 
     
    		if (isGranted)
    		{
    			arg2.doFilter(arg0, arg1);
    		}
     
     
    		//System.out.println("SORT");
     
    	}
     
    	public void init(FilterConfig arg0) throws ServletException {
    		// TODO Auto-generated method stub
     
    	}
     
    }

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Par défaut comment utiliser ca
    bonjour j'arrive pas a faire ca :
    -1-est ce que ca conncerner les filters de fichier web.xml et comment je peux
    utiliser un repertoire "restricted" ou toutes les pages ont un accès limité
    -2-dans mon server filter comment je peux tester si la page demandée contient "resticted" dans l'url ou pas

  4. #4
    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 )Oui c'est le filter du webxml.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <filter>
        	<filter-name>RestrictedAccess</filter-name>
        	<filter-class>fr.dev.cleanjsf.presentation.security.RestrictedFilter</filter-class>
        </filter>
     
    <filter-mapping>
        	<filter-name>RestrictedAccess</filter-name>
        	<url-pattern>/*</url-pattern>
        </filter-mapping>
    2 )je t'ai mis ma classe filter en exemple ou tu peux y voir le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if   ( request.getRequestURL().toString().indexOf(Config.RESTRICTED_FOLDER_NAME)>=0)
    qui teste si le mot Config.RESTRICTED_FOLDER_NAME (qui est le nom du répertoire protegé) est dans la demande.

    3 ) Ne me répond pas en privé, le but du forum est d'en faire profiter tout le monde

    Bon courage.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Bon alors, pour créer un zone à accès restreint (ex http://server/mawebapp/admin/*), J2EE te fournis déjà tout ce qu'il te faut.

    Tout d'abord, dans ton web.xml, tu déclare que tu veux une authentification par "formulaire" et tu précise les fichiers à utiliser (fichier de formulaire et fichier d'erreur). Cela se met dans le web.xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <login-config>
      <auth-method>FORM</auth-method>
      <form-login-config>
        <form-login-page>/loginForm.jsp</form-login-page>
        <form-error-page>/loginError.jsp</form-error-page>
      </form-login-config>
    </login-config>
    Ensuite tu crée ton fichier de formulaire /loginForm.jsp (note: tu peux aussi utiliser directement du html, sans partie "dynamique" en jsp).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <form method="POST" action="j_security_check">
     
      Nom: <input type="text"     name="j_username"><br />
      Mot de passe: <input type="password" name="j_password"><br />
      <br />
     
      <input type="submit" value="Login">
      <input type="reset"  value="Reset">
     
    </form>
    Les choses importantes dans le formulaire: la méthode "POST", l'action, obligatoireement "j_security_check" et les noms des inputs (j_username, j_password). Tout çà est obligatoire et ne peut *pas* être changé (spécifications jsf oblige). Par contre tu peux décorer autant que tu veux ton formulaire pour faire plaisir à l'utilisateur, mettre le logo de la boite, etc, etc...


    Maintenant, il faut dire au conteneur J2EE que certaines zones sont restreinte. Quand l'utilisateur anonyme tentera d'y accéder, il sera redirigé automatiquement vers le formulaire. Toujours dans ton 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
    <security-constraint>
      <web-resource-collection>
        <web-resource-name>Pages securisees admin</web-resource-name>
        <description>Contrainet pour /admin</description>
        <url-pattern>/admin/*</url-pattern>
        <http-method>POST</http-method>
        <http-method>GET</http-method>
      </web-resource-collection>
      <auth-constraint>
        <description>Seuls les admins on accès</description>
        <role-name>admin</role-name>
        <role-name>superadmin</role-name>
      </auth-constraint>
    </security-constraint>
    Ceci dit que pour tout accès de type POST ou GET à la zone /admin/*, il faut faire partie du role admin ou du role superadmin.

    Et finalement, plus bas dans le xml, tu définis le role admin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <security-role>
      <description>The Only Secure Role</description>
      <role-name>admin</role-name>
    </security-role>
    Maintenant, tu a une zone réservée pour laquelle le conteneur présente automatiquement un formulaire de login que tu as dessiné. Reste plus qu'à définir les noms des utilisateurs, leur mot de passe et leur rôles. Mais comment me dira-tu? Et bien là, c'est spécifique à chaque conteneur. Si tu utilise tomcat, tu devra définir un "Realm" pour ton application (Basé soit sur un fichier tomcat-users.xml, soit sur un ldap, soit sur une base de donnée sql, etc). Si tu es sous JBoss, c'est un JAAS qu'il te faudra configurer. Pour configurer la liste d'utilisateurs, je ne peux donc que te suggérer de regarder la documentation spécifique à ton conteneur. C'est jamais bien difficile.

    Attention, une erreur assez commune quand on utilise l'authentification "form-based" au début, c'est de vouloir créer un lien comme çà dans une page web:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="login.jsp">Pour vous logger, cliquez ici</a>
    Ca ne marchera pas, car, pour se logguer, en J2EE, il faut que l'utilisateur demande au préalable une page nécessitant l'authentification. En fait, l'authentification ne peut pas être volontaire, elle doit être nécessaire.
    La bonne méthode est, par exemple, la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="admin/index.html">Cliquez ici pour accéder à l'interface d'administration</a>
    Bien entendu, si çà ne te plait pas, tu peux toujours tout faire à la main. Mais il serait peut être bête de passer à coté de la possiblité de laisser ton conteneur gérer les droits d'accès

    Voilà, bon amusement.

    PS: ta question ne concerne visiblement pas JSF du tout, la prochaine fois, pense à poster plutot dans le forum servlet/jsp

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Par défaut
    bonjour tous le monde,
    1- j'ai fais pas a pas est ce que vous expliquer tchize mais marche pas:
    au depart le page de login http://127.0.0.1:8086/GestionParcAutomobile/faces/loginForm.jsp marche tres bien
    mais j'ai encors meme probleme il suffit de faire
    http://127.0.0.1:8086/GestionParcAutomobile/faces/admin/Bienvenue.jsp
    pour acceder sont authentification .

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu as bien mis la zone à accès restreint, dans ton cas, comme étant

    /faces/admin/* ?


    (mon exemple mentionnait seulement /admin/*, à toi d'adapter les chemins à ton cas)

  8. #8
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Par défaut
    Merci infiniment tchize.Tu m'as sauvé, ça fait une semaine que je cherche la solution merci encore
    -j'ai un petit probleme encore : comment pointer la page de login vers le bean jsf voila ma page avant login.jsp:
    =======================

    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
    		<f:view>
    			<h:form>
    				<br>
    				<br>
    				<br>
    				<br>
    				<br>
    				<br>
    				<div align="center">
    					<strong><font color="#ff0000"> <h:graphicImage
    								value="#{UtilisateurBean.iconUser}"
    								rendered="#{UtilisateurBean.montrerIconUser}"></h:graphicImage>
    							<h:outputText value="#{UtilisateurBean.errUser}"></h:outputText>
    					</font> </strong>
     
    					<br>
    					<br>
    					<br>
    					<h:panelGrid columns="3" cellpadding="3" styleClass="général"
    						rowClasses="un, deux" width="700" frame="box" cellspacing="20"
    						rules="all">
     
    						<f:facet name="header">
    							<h:outputText value="Connexion a l'Intranet G.P.A">
    								<h:graphicImage value="images/user.gif"></h:graphicImage>
    								<br>
    							</h:outputText>
    						</f:facet>
     
    						<h:outputText value="Login : " styleClass="couleur" />
    						<h:inputText value="#{UtilisateurBean.currentUtilisateur.login}"
    							size="30" id="login" required="true"
    							requiredMessage="Login Invalide.">
    						</h:inputText>
    						<h:message for="login" errorClass="erreur" />
     
    						<h:outputText value="Mot de Passe : " styleClass="couleur" />
    						<h:inputText
    							value="#{UtilisateurBean.currentUtilisateur.motDePasse}"
    							size="30" id="motDePasse" required="true"
    							requiredMessage="Mot de Passe Invalide.">
    						</h:inputText>
    						<h:message for="motDePasse" errorClass="erreur" />
     
    					</h:panelGrid>
     
    					<h:commandButton value="   Valider   "
    						action="#{UtilisateurBean.verUtilisateur}"></h:commandButton>
    			</h:form>
    		</f:view>
    le bean est:
    =========
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    package Utilisateur;
     
    import javax.faces.model.SelectItem;
    // default package
     
     
     
    /**
     * AbstractUtilisateur generated by MyEclipse - Hibernate Tools
     */
     
    public abstract class AbstractUtilisateur  implements java.io.Serializable {
     
     
        // Fields    
     
         private Integer idUser=null;
         private String nom=null;
         private String prenom=null;
         private String login=null;
         private String motDePasse=null;
         private String droit=null;
         private String confirmer=null;
         private String[] privilege=null;
     
        // Constructors
     
        /** default constructor */
        public AbstractUtilisateur() {
        }
     
     
        /** full constructor */
        public AbstractUtilisateur(Integer idUser, String nom, String prenom, String login, String motDePasse, String droit) {
            this.idUser = idUser;
            this.nom = nom;
            this.prenom = prenom;
            this.login = login;
            this.motDePasse = motDePasse;
            this.droit = droit;
        }
     
     
        // Property accessors
     
        public Integer getIdUser() {
            return this.idUser;
        }
     
        public void setIdUser(Integer idUser) {
            this.idUser = idUser;
        }
     
        public String getNom() {
            return this.nom;
        }
     
        public void setNom(String nom) {
            this.nom = nom;
        }
     
        public String getPrenom() {
            return this.prenom;
        }
     
        public void setPrenom(String prenom) {
            this.prenom = prenom;
        }
     
        public String getLogin() {
            return this.login;
        }
     
        public void setLogin(String login) {
            this.login = login;
        }
     
        public String getMotDePasse() {
            return this.motDePasse;
        }
     
        public void setMotDePasse(String motDePasse) {
            this.motDePasse = motDePasse;
        }
     
        public String getDroit() {
            return this.droit;
        }
     
        public void setDroit(String droit) {
            this.droit = droit;
        }
     
     
    	public String getConfirmer() {
    		return confirmer;
    	}
     
     
    	public void setConfirmer(String confirmer) {
    		this.confirmer = confirmer;
    	}
     
    //	 PROPERTY: privilege
    	public String[] getPrivilege() {
    		return privilege;
    	}
     
    	public void setPrivilege(String[] newValue) {
    		privilege = newValue;
    	}
     
    	// PROPERTY: privilegeItems
    	public SelectItem[] getPrivilegeItems() {
    		return privilegeItems;
    	}
     
    	// PROPERTY: privilegeConcatenated
    	public String getPrivilegeConcatenated() {
    		return concatenate(this.privilege);
    	}
     
    	public static String concatenate(Object[] values) {
    		if (values == null)
    			return "";
    		StringBuffer r = new StringBuffer();
    		for (int i = 0; i < values.length; ++i) {
    			if (i > 0)
    				r.append(',');
    			r.append(values[i].toString());
    		}
     
    		return r.toString();
    	}
     
    	public static String[] deconcatenate(String values) {
    		if (values == null)
    			return null;
    		String[] r=null;
    		r=values.split(",");
    		return r;
    	}
     
    	private static SelectItem[] privilegeItems = new SelectItem[] {
    			new SelectItem("Ajout"), new SelectItem("Modification"),
    			new SelectItem("Consultation"), new SelectItem("Supprission") };
    }

  9. #9
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Par défaut
    voire cela dans le forum voila donc il peux t'aider:
    http://beuss.developpez.com/tutoriel...on/formulaire/

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 59
    Par défaut
    ce que je vous propose c'est de creer une taglib par exemple:
    <NeedLogin needed="True/false", level="0..10">
    qui verfier lors de chargement de la page jsp si on a besoin d'etre loggée ou pas et si meme on est logger, est ce qu'on a le prévilège d'acceder à la page (une page d'administration pour suppresssion de compte par exemple)
    moi j'ai deja travaillé avec et ca marche super bien, donc il suffit de rajouter la tag au debut de chaque page
    bon courage

  11. #11
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Par défaut
    bonjour

Discussions similaires

  1. [Security] Spring security 3 web.xml
    Par sgamette dans le forum Spring
    Réponses: 3
    Dernier message: 07/11/2010, 12h59
  2. security jsf login.jsp
    Par Johana dans le forum Services Web
    Réponses: 3
    Dernier message: 10/10/2007, 13h42
  3. [JSP] prob pour combiner STRUTS et TILES (web.xml)
    Par lipao17 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/04/2005, 10h57
  4. [JSP]recuperer session-timeout dans web.xml
    Par seb_fou dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/05/2004, 16h01
  5. [Débutant][Application web] : web.xml + includes jsp
    Par silver_dragoon dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 12/02/2004, 20h46

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