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

Spring Java Discussion :

Mapper des infos LDAP vers un bean custom à l'aide de spring security


Sujet :

Spring Java

  1. #1
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut Mapper des infos LDAP vers un bean custom à l'aide de spring security
    Bonjour à tous,

    J'utilise spring security 3.1 dans mon appli. Mes utilisateurs doivent être dans le LDAP. Les rôles sont chargés depuis la base. Ca marche bien.

    Par contre, ce que je n'arrive pas à faire, c'est récupérer les info perso (prénom, email, etc.) et les mapper directement vers un bean.

    mon security-app-context.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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    	<beans:bean id="contextSource"
    		class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
    		<beans:constructor-arg index="0"
    			value="ldap://clusterldap.masociete.com:389/dc=corp,dc=masociete,dc=com" />
    		<beans:property name="userDn" value="cn=readldap,dc=masociete,dc=com" />
    		<beans:property name="password" value="lecture" />
    	</beans:bean>
     
    	<beans:bean id="ldapUserSearch"
    		class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
    		<beans:constructor-arg index="0" value="ou=people" /> <!-- Branche principale à partir de laquelle faire la recherche -->
    		<beans:constructor-arg index="1" value="(uid={0})" /> <!-- Critère de recherche LDAP, ici le login de l'utilisateur correspond 
    			à l'uid de l'entrée LDAP -->
    		<beans:constructor-arg index="2" ref="contextSource" />
    		<beans:property name="searchSubtree" value="true" /> <!-- Recherche dans les sous-branches -->
    	</beans:bean>
     
    	<beans:bean id="myAuthoritiesPopulator"
    		class="com.masociete.monprojet.web.MyAuthoritiesPopulator" />
     
    	<beans:bean id="ldapAuthProvider"
    		class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
    		<beans:constructor-arg index="0">
    			<beans:bean
    				class="org.springframework.security.ldap.authentication.BindAuthenticator">
    				<beans:constructor-arg index="0" ref="contextSource" />
    				<beans:property name="userSearch" ref="ldapUserSearch" />
    			</beans:bean>
    		</beans:constructor-arg>
    		<beans:constructor-arg index="1"
    			ref="myAuthoritiesPopulator" />
    	</beans:bean>
     
    	<authentication-manager alias="authenticationManager">
    		<authentication-provider ref="ldapAuthProvider" />
    	</authentication-manager>
     
    <!-- reste de la conf a faire pour mapper directement -->
    Mon populator :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class MyAuthoritiesPopulator implements LdapAuthoritiesPopulator {
    	public Collection<? extends GrantedAuthority> getGrantedAuthorities(DirContextOperations userData, String username) {
     
    		final List<GrantedAuthority> authorities = newArrayList();
     
    		final MonUserDB user = monCredentialsService.searchUser(username);
     
    		// token
    		final List<GrantedAuthority> grantedAuthorities = getAuthorities(user.getRoles());
    		authorities.addAll(grantedAuthorities);
     
    		return authorities;
    	}
    Quant à mon UserLdap, je voudrais qu'il ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class UserLdap {
      string prenom;
      string email;
      ...
    }
    Au debuger, je vois bien que mon DirContextOperations userData contient les champs suivants dans originalAttrs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    givenname=givenName: Thierry
    mail=mail: thierry_leriche@masociete.com
    Mais je voudrais bien que spring me remplisse tout seul les infos qui viennent du ldap.

    Merci d'avance.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 105
    Points
    105
    Par défaut
    Bonjour,


    Je cherche à faire la même chose que vous, je souhaite juste une chose:

    vous avez donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <beans:property name="password" value="lecture" />
    Serait-il possible que au même titre que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <beans:constructor-arg index="1" value="(uid={0})" /> <!-- Critère de recherche LDAP, ici le login de l'utilisateur correspond
    Je puisse faire quelque chose pour la password du style?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <beans:property name="password" value="(pass={0})" />
    Car les utilisateurs renseigne login et mot de passe dans un formulaire. Alors comment pluguer cela dans l'XML de configuration.

    Je vous remercie d'avance.

  3. #3
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Bonjour,

    Je ne suis pas certain de bien comprendre. En fait, j'utilise un login/pass avec des droits spécifiques pour faire mes recherches. En gros, faut être admin. Dans ton cas, ça peut marcher aussi mais je ne vois pas très bien l’intérêt. C'est ton logiciel qui se connecte au LDAP et non ton user.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  4. #4
    Membre habitué Avatar de chewing-gum
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 105
    Points : 137
    Points
    137
    Par défaut
    Bonjour,
    Au debuger, je vois bien que mon DirContextOperations userData contient les champs suivants dans originalAttrs :
    originalAttrs est un champ de quel type ? Ne serait-pas une liste d'objets de type "LdapAttribute" ?

    J'ai réalisé ce que vous essayez de faire sur un projet (mais c'était il y a quelques mois déjà). Mais de mémoire, j'avais plutôt utilisé une méthode "getAttribute("NomDuCHampLDAP")".

    J'essaierai de retrouver le code ce soir... Mais il ne sera sans doute pas coder de la même manière.

Discussions similaires

  1. jsf et passage des parametres de l'url vers le bean
    Par riadhhwajdii dans le forum JSF
    Réponses: 1
    Dernier message: 10/09/2009, 14h34
  2. Réponses: 6
    Dernier message: 20/06/2007, 11h04
  3. Réponses: 8
    Dernier message: 23/01/2007, 21h02
  4. Envoyer des infos vers deux scripts
    Par Samrock dans le forum Langage
    Réponses: 6
    Dernier message: 31/01/2006, 19h05
  5. [CR7][VB6] Passer des infos de Vb vers CR
    Par tripper.dim dans le forum SDK
    Réponses: 2
    Dernier message: 13/11/2003, 13h30

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