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

Servlets/JSP Java Discussion :

Authentification et controle d'acces


Sujet :

Servlets/JSP Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Points : 223
    Points
    223
    Par défaut Authentification et controle d'acces
    Pour un site, je dois mettre en place un système d'authentification et de controle d'acces aux pages (jusque la normal on dira).

    Donc pour le moment, j'ai codé moi même cette authentification/controle à l'aide d'un filtre de servlet, mais je galère pour expliquer ensuite à la Servlet si elle doit effectuer le traitement ou renvoyer une page d'erreur (pas autorisé ...).
    J'ai plus ou moins cru comprendre qu'il me fallait dans mon filtre utiliser un ResponseWrapper pour modifier le contenu de la reponse. Seulement je n'arrive pas à en comprendre plus, ni les tuto sun ni rien ne m'aide ...

    Donc quelqu'un pourrai t'il m'expliquer un peu le comment ca marche les ResponseWrapper ?

    Sinon j'ai vu également que Tomcat pouvait effectuer ces controle d'accès :
    serai ce moins galère ? En même temps mon authentification est assez spéciale :
    Deja le pass n'est pas en clair dans la base mais hashé par SHA-256 et qui plus est ce n'est pas simplement le pass qui est hashé mais un sel est ajouté.
    Ensuite, une fois l'authentification faite, je stocke mon User en session et j'en ai besoin dans certains traitements. Es-ce réalisable avec l'authentification Tomcat ?
    Donc pareil, es ce possible et comment faire pour faire effectuer tout ceci à Tomcat si cette solution semble la mieux ?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 136
    Points : 143
    Points
    143
    Par défaut
    bonjour,
    tu peux regarder du côté du projet jGuard http://jguard.xwiki.com (dont je fais partie), qui fait ce dont tu as besoin.

    hope it helps,

    Charles.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Points : 223
    Points
    223
    Par défaut
    J'avais bien vu jguard mais utilisant hibernate et mes table en base de données étant déjà en place pour l'ensemble de l'appli il m'a semblait (peut être pas du tout à juste titre) que cela serait un peu compliqué à mettre en place. On va dire en gros il me reste 3 jours pour tout finir ... (Ahhhhhh).

    Mais si tu dis le contraire et que tu est prêt à me donner la patte je veux bien tenter le coup.

  4. #4
    Pi2
    Pi2 est déconnecté
    Membre actif

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 134
    Points : 234
    Points
    234
    Par défaut
    Avec Tomcat, l'authentification s'effectue a l'aide des REALM. C'est très pratique et, si ton authentification n'est pas de base mais nécessite des traitements spécifiques à ton appli, tu peux étendre une classe REALM qui existe. C'est donc une architecture propre. Pour les finos sur les REALM, va voir:
    http://www-igm.univ-mlv.fr/~dr/XPOSE...hp?rub=5&id=11
    ou
    http://tomcat.apache.org/tomcat-4.1-...alm-howto.html

    Si, tu préfères rester avec le mécanisme que tu as commencé à implémenter (filtre), pourquoi, dans le cas où l'authentification échoue, tu ne lances pas une exception (à la place d'une redirection avec des ResponseWrapper)? Ca serait plus propre. Je m'explique, si l'authentification réussi, ok. Si elle échoue, tu lances une exception. Dans ton fichier web.xml, tu spécifie l'URL de la page vers laquelle etre redirigé lorsque ce type d'exception survient: et voilà.

    Dans web.xml:
    <error-page> <exception-type>appli.exception.servlet.UserUnknownException</exception-type>
    <location>/errors/login_fail.jsp</location>
    </error-page>

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Points : 223
    Points
    223
    Par défaut
    Justement, lancé une exception cela ne fonctionnait pas, je ne l'avais cependant pas spécifié dans mon web.xml.

    Apparement on m'avait expliqué (à tort ou à raison) que ce n'etait pas possible de renvoyer une page depuis le filtre ...

    C'est quoi le principe de ta definition dans le web.xml ? Des que l'exception précisé survient, le moteur de servlet envoi systématiquement la page précisé ?

    Moi j'ai gérer l'ensemble de mes exceptions niveau servlet de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try {
    	//traitement 				
    }
    catch(Une exception e){ 
    	envoiErreur.sendError(req,res,ERREUR,null);
    }
    avec sendError qui lui renvoi la page d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void sendError(HttpServletRequest req, HttpServletResponse res, String errorType, String optionnalText) throws IOException{
    		HttpSession s = req.getSession(true);
     
    		s.setAttribute("errorMessage",errorType);
    		s.setAttribute("option",optionnalText);
     
    		res.sendRedirect(res.encodeRedirectURL("pages/error.jsp"));
    	}

  6. #6
    Pi2
    Pi2 est déconnecté
    Membre actif

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 134
    Points : 234
    Points
    234
    Par défaut
    >Des que l'exception précisé survient, le moteur de servlet envoi systématiquement la page précisé ?

    oui c'est cela.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Points : 223
    Points
    223
    Par défaut
    Erf le soucis c'est qu'il n'est pas trop d'accord, voila mon doFilter :
    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
     
    public void doFilter(ServletRequest req, ServletResponse res,
    		FilterChain chain) throws IOException, ServletException, UnauthorizedAccess {
    		System.out.println("Youhou");
    		HttpSession session = null;	
    			/*On verifie que l'user est authentifié (presence de son objet en Session)*/
    			session = haveSession((HttpServletRequest) req);
    			/*On recupère l'URI demandé*/
    			String URI = ((HttpServletRequest)req).getRequestURI();
     
    			//On teste si la variable personne qui doit être ds la session est un User ou un Admin
    			if(session.getAttribute("personne") instanceof User){
    				isUserPage(URI);
    			}
    			else if (session.getAttribute("personne") instanceof Admin) {
    				isAdminPage(URI);
    			}	
    			chain.doFilter(req,res);
    	}
     
     
    	private void isUserPage(String uri) throws UnauthorizedAccess{
    		boolean isAuthorized = false;
    		for(int i=0;i<restrictedUserPages.length;i++){
    			if (uri.equals(BASE_URI + USER_REP + restrictedUserPages[i]))
    				isAuthorized = true;
    		}
    		if (!isAuthorized)
    			throw new UnauthorizedAccess();
    	}
     
    	private void isAdminPage(String uri) throws UnauthorizedAccess{
    		boolean isAuthorized = false;
    		System.out.println(uri);
    		for(int i=0;i<restrictedAdminPages.length;i++){
    			System.out.println(BASE_URI + USER_REP + restrictedAdminPages[i]);
    			if (uri.equals(BASE_URI + USER_REP + restrictedAdminPages[i]))
    				isAuthorized = true;
    		}
    		if (!isAuthorized)
    			throw new UnauthorizedAccess();
    	}
    et il me dit :
    Unauthorized exception is not compatible with throws clauses in Filter.doFilter...

  8. #8
    Pi2
    Pi2 est déconnecté
    Membre actif

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 134
    Points : 234
    Points
    234
    Par défaut
    Il faut que l'exception que tu lances soit une ServletException donc ta classe UnauthorizedException doit étendre ServletException.

Discussions similaires

  1. Controle d'accés au base de données
    Par benamed dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2007, 19h06
  2. [Cookies] cookie de session pour controle d'accés
    Par Shyboy dans le forum Langage
    Réponses: 1
    Dernier message: 12/04/2007, 08h57
  3. controle d'acces a l'internet
    Par anisj1m dans le forum Développement
    Réponses: 2
    Dernier message: 26/02/2007, 12h43
  4. Authentification et droits d'accès
    Par Gregouze dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 01/02/2007, 22h53
  5. controle d'accés pour un fichier (oracle)
    Par tsyl dans le forum Oracle
    Réponses: 13
    Dernier message: 17/03/2006, 09h03

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