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 :

[jsp][servlet] Sécurisation d'une servlet


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier Avatar de Gromitou
    Profil pro
    Inscrit en
    Février 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2003
    Messages : 98
    Points : 81
    Points
    81
    Par défaut [jsp][servlet] Sécurisation d'une servlet
    Salut a tous,

    je cherche a restreindre l'acces a une de mes pages jsp en fonction d'un utilisateur ou d'un groupe ayant des droits. C'est a dire que en fonction de qui demande la page, je l'affiche ou j'affiche une page lui indiquant qu'il n'a pas acces a ce contenu.

    Apres moultes recherches j'ai mis en place un truc de ce style :

    Dans ma servlet :

    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
    /**
    	 * Permet de savoir si un utilisateur est authentifié ou pas
    	 * @param requete la requette http
    	 * @return true si l'utilisateur a les droit d'accéder a la suite
    	 */
    	private boolean estAuthentifie(HttpServletRequest requete){
     
    		Principal principal = requete.getUserPrincipal();
     
    		if(principal == null){
    			return false;
    		}
     
    		String remoteUser = principal.getName();
     
    		remoteUser = requete.getRemoteUser();
     
    		return requete.isUserInRole("User");
     
    	}
    là viens le probleme, comment definir le role "User" et ou ? Because ici, le "requete.getUserPrincipal();" renvoie null, forcément puisque je ne l'ai defini nulle part !

    j'ai tenté dans le web.xml puis dans le application.xml de mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <security-role>
    		<description>
    		utilisateur</description>
    		<role-name>user</role-name>
    	</security-role>
    ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     <security-role-ref>
    		<description> permet de relier le role name a l'element reel </description>
    		<role-name>User</role-name>
    	</security-role-ref>
    mais alors que ce soit l'une ou l'autre solution, le serveur me sort une erreur :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Severity	Description	Resource	In Folder	Location	Creation Time
    2	cvc-complex-type.2.4.a : Contenu non valide commençant par l'élément 'security-role-ref'. Contenu de '{"http://java.sun.com/xml/ns/j2ee":security-role}' attendu.	application.xml	Racine/META-INF	line 28	16 février 2006 10:28:46
    alors, je commence a pédaler dans la semoule, je ne vois plus par ou je peux avancer ...

  2. #2
    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
    Points : 5 059
    Points
    5 059
    Par défaut
    il faut définir les security-constraint dans le web.xml ..

    voilà un peu de docs ..

    http://tomcat.apache.org/tomcat-5.5-...ger-howto.html


  3. #3
    Membre régulier Avatar de Gromitou
    Profil pro
    Inscrit en
    Février 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2003
    Messages : 98
    Points : 81
    Points
    81
    Par défaut
    J'avais deja essayé de bidouiller un truc dans ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	<security-constraint>
    <display-name>
    		User</display-name>
    		<web-resource-collection>
    			<web-resource-name>tout</web-resource-name>
    			<url-pattern>/*</url-pattern>
    		</web-resource-collection>
    		<auth-constraint>
    			<description>
    			</description>
    			<role-name>User</role-name>
    		</auth-constraint>
    	</security-constraint>
    mais ca ne change rien

    Et pour info j'utilise un serveur WebSphere et non pas TomCat, ce qui ne m'arrange pas vraiment

  4. #4
    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
    Points : 5 059
    Points
    5 059
    Par défaut
    ahh ok;
    faut regarder la doc de ton serveur ..

  5. #5
    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 aussi regarder du côté de jGuard: www.jguard.net


    Charles(jGuard team).

  6. #6
    Membre régulier Avatar de Gromitou
    Profil pro
    Inscrit en
    Février 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2003
    Messages : 98
    Points : 81
    Points
    81
    Par défaut
    Merci de vos réponses.

    Pour ce qui est de la doc de websphere, vous pensez bien que c'est la premiere choses que j'ai fait apres mon ami Google ! J'y ai trouvé plusieurs choses, c'est ça qui m'a permis d'ecrire le code que j'a icité plus haut. Le probleme c'est que ce code marche pas. D'autres part, il est souvent fait référence a un outil (AAT) mais qui est spécifique a la version 4, j'utilise la 6...

    Bref, ca fait un moment que j'ai fait le tour de la doc officielle mais la les neuronnes chauffent

    Pour ce qui est de jguard, je suis loin d'etre contre, au contraire, j'ai regardé Acegi aussi mais j'aimerais bien faire tourner ca a la main d'abord, c'est quand même super louche que websphere avec ses wattmiles assistants dans tous les sens ne permette pas ça "presque" facilement (au moins pas beaucoup plus dur que les tomcat, jboss, sun and co) !!!

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 114
    Points : 77
    Points
    77
    Par défaut
    allo
    moi je vois une solution plus simple que ca!! je ne sais pas si tu as déja pensé a ça!!
    quand ton utilisateur s'authentifie au début ds ton appli!! alors tu dois lui accorder un role!! et tu dois ajouter ce role a sa session (setAtribute(nom, valeur)), apres!! si un user veut acceder a ta jsp tu vas extraire son role de sa session (getAtribute(nom)) et selon se role tu vas lui permettre d'acceder ou non a ta jsp

  8. #8
    Membre habitué

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Bonjour

    Tu dois tout d'abord déclarer les pages protégées et les roles ayant accès dans le fichier 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
    <security-constraint>
    	<display-name>Test d'authentification</display-name>
    	<!-- Liste des pages protégées -->
    	<web-resource-collection>
    		<web-resource-name>Page sécurisée</web-resource-name>
    		<url-pattern>/admin/*</url-pattern>
    	</web-resource-collection>
    	<!-- Rôles des utilisateurs ayant le droit d'y accéder -->
    	<auth-constraint>
    		<role-name>User</role-name>
    	</auth-constraint>
    </security-constraint>
    <login-config>
     <!-- Type d'authentification -->
     <auth-method>BASIC</auth-method>
     <realm-name>Espace Membres</realm-name>
    </login-config>
    <!-- Rôles utilisés dans l'application -->
    <security-role>
    	<description>Administrateur</description>
    	<role-name>User</role-name>
    </security-role>
    Cela demandera une authtentification à l'utilisateur.si ce n'est pas déja fait.

    Tout ce qui suit est spécifique a WAS que je ne connait pas du tout, mais les grandes lignes sont:

    1: Declarer le royaume sur les serveur dont le nom est égal à celui dans le web.wml

    2: dans la configuration du serveur pour ce royaume, il faut ajouter les utilisateurs et les roles auxquels ils appartiennent.

    3: Si il y a un descripteur de déploiement spécifique sur WAS6 il doit contenir un mapping entre les roles applicatifs et les roles déclarés sur le serveur pour le royaume

    Cordialement
    Willy78

  9. #9
    Membre régulier Avatar de Gromitou
    Profil pro
    Inscrit en
    Février 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2003
    Messages : 98
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par willy78
    Cela demandera une authtentification à l'utilisateur.si ce n'est pas déja fait.

    Tout ce qui suit est spécifique a WAS que je ne connait pas du tout, mais les grandes lignes sont:

    1: Declarer le royaume sur les serveur dont le nom est égal à celui dans le web.wml

    2: dans la configuration du serveur pour ce royaume, il faut ajouter les utilisateurs et les roles auxquels ils appartiennent.

    3: Si il y a un descripteur de déploiement spécifique sur WAS6 il doit contenir un mapping entre les roles applicatifs et les roles déclarés sur le serveur pour le royaume

    Cordialement
    Le probleme est la justement. Parceque lorsque je deploie mon appli sous JBoss, une boite d'autehnfication apparait et je peux la passer (j'ai ajouter les fichiers qui vont bien dans le repertoire de conf de JBoss). Une probleme se pose apres mais l'authenfication roule. Pare contre sous Websphere, il ne me demande jamasi rien et m'affiche les pages sans restriction !

    J'ai beau eu épluché la doc, je ne vois pas comment et ou faire l'équivalent sous WebSphere. Ca doit surement se jouer dans la page "sécurité>Sécurité globale" mais je ne vois rien en rapport avec des realm ou des royaumes

    Encore une fois, c'est surement tout con, mais quand on connait pas ...

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/01/2011, 16h43
  2. Réponses: 5
    Dernier message: 21/05/2009, 11h40
  3. [servlet]multithreading d'une servlet
    Par amel666 dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 31/01/2006, 22h22
  4. [Servlet]probleme avec une servlet
    Par adilou1981 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 15/06/2005, 10h17
  5. [Servlet] Comment utilisé une servlet plusieurs fois ?
    Par gandalf_le_blanc dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 03/06/2004, 14h49

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