2011-09-14 3 views
1

Je suis nouveau à la sécurité de printemps et j'ai essayé d'exécuter un exemple d'application basée sur l'exemple de printemps-sécurité ldap. Voici ma configuration du applicationContext-security.xml:Authentification de sécurité de printemps utilisant LDAP

<http> 
     <intercept-url pattern="/Login.jsp" filters="none"></intercept-url> 
     <intercept-url pattern="/nnn/**" access="ROLE_ADMIN" /> 
     <intercept-url pattern="/common/**" access="ROLE_USER" /> 
     <form-login login-page="/Login.jsp" authentication-failure-url="/Login.jsp?login_error=1" 
        default-target-url="/common/home.jsp"/> 
     <logout logout-success-url="/Login.jsp" invalidate-session="true"/> 
    </http> 

    <authentication-manager> 
     <ldap-authentication-provider group-search-filter="member={0}" 
      group-search-base="ou=groups" 
      user-search-base="ou=people" 
      user-search-filter="uid={0}" /> 
      <authentication-provider ref='secondLdapProvider' /> 
    </authentication-manager> 

    <ldap-server ldif="classpath:users.ldif" port="33389"/> 

    <b:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"> 
     <b:constructor-arg value="ldap://localhost:33389/dc=springframework,dc=org"/> 
    </b:bean> 

Je l'ai utilisé le fichier user.ldif tel qu'il est. L'application s'exécute correctement si j'utilise les valeurs par défaut. Mais si je mets toute autre valeur à la place de springframework, par exemple Google, dans le fichier LDIF et la fève contextSource dans le applicationContext-security.xml, puis-je obtenir l'erreur ci-dessous:

Your login attempt was not successful, try again. 

Reason: [LDAP: error code 32 - NO_SUCH_OBJECT: failed for SearchRequest baseDn : 
'2.5.4.11=people,0.9.2342.19200300.100.1.25=google,0.9.2342.19200300.100.1.25=org' filter : '(0.9.2342.19200300.100.1.1=rod)' scope :whole 
subtree typesOnly : false Size Limit : no limit Time Limit : no limit Deref Aliases : deref Always attributes : : Cannot find a partition for 
2.5.4.11=people,0.9.2342.19200300.100.1.25=google,0.9.2342.19200300.100.1.25=org: 
org.apache.directory.shared.ldap.exception.LdapNameNotFoundException: Cannot find a partition for 
2.5.4.11=people,0.9.2342.19200300.100.1.25=google,0.9.2342.19200300.100.1.25=org at 
org.apache.directory.server.core.partition.DefaultPartitionNexus.getPartition(DefaultPartitionNexus.java:1082) at 
org.apache.directory.server.core.partition.DefaultPartitionNexus.hasEntry(DefaultPartitionNexus.java:1037) at 
org.apache.directory.server.core.interceptor.InterceptorChain$1.hasEntry(InterceptorChain.java:167) at 

Quelqu'un pourrait-il dire s'il vous plaît moi pourquoi je reçois l'erreur ci-dessus ...


C'est le fichier LDIF:

dn: ou=groups,dc=google,dc=org 
objectclass: top 
objectclass: organizationalUnit 
ou: groups 

dn: ou=people,dc=google,dc=org 
objectclass: top 
objectclass: organizationalUnit 
ou: people 

dn: uid=rod,ou=people,dc=google,dc=org 
objectclass: top 
objectclass: person 
objectclass: organizationalPerson 
objectclass: inetOrgPerson 
cn: Rod Johnson 
sn: Johnson 
uid: rod 
userPassword: koala 

dn: uid=dianne,ou=people,dc=google,dc=org 
objectclass: top 
objectclass: person 
objectclass: organizationalPerson 
objectclass: inetOrgPerson 
cn: Dianne Emu 
sn: Emu 
uid: dianne 
userPassword: emu 

dn: uid=scott,ou=people,dc=google,dc=org 
objectclass: top 
objectclass: person 
objectclass: organizationalPerson 
objectclass: inetOrgPerson 
cn: Scott 
sn: Wombat 
uid: scott 
userPassword: wombat 

dn: cn=user,ou=groups,dc=google,dc=org 
objectclass: top 
objectclass: groupOfNames 
cn: user 
member: uid=rod,ou=people,dc=google,dc=org 
member: uid=dianne,ou=people,dc=google,dc=org 
member: uid=scott,ou=people,dc=google,dc=org 

dn: cn=teller,ou=groups,dc=google,dc=org 
objectclass: top 
objectclass: groupOfNames 
cn: USER 
member: uid=rod,ou=people,dc=google,dc=org 
member: dianne=rod,ou=people,dc=google,dc=org 

dn: cn=supervisor,ou=groups,dc=google,dc=org 
objectclass: top 
objectclass: groupOfNames 
cn: ADMIN 
member: uid=rod,ou=people,dc=google,dc=org 

au lieu de google, il était springframework dans le fichier d'origine de l'échantillon applic ation. Ai-je manqué quelque chose dans ce ...

Répondre

0

Une requête de recherche doit contenir au minimum un objet de base, une portée et un filtre. L'objet de base spécifié dans votre requête n'existe pas, la recherche échoue donc. Le code d'erreur 32 est, comme vous pouvez le voir, «aucun objet de ce type», dans ce cas, l'objet de base.

1

Vous devez définir root comme base-dn/suffixe (dc = google, dc = org, dans votre cas) pour que cela fonctionne. donc, dans l'ensemble, il y a trois endroits où vous avez besoin de faire des changements:

  1. la racine dans le ldap-server
  2. la définition source de contexte
  3. le fichier LDIF

La valeur par défaut root est dc=springframework,dc=org c'est pourquoi vous n'avez pas besoin de le définir dans l'exemple que vous avez posté. Pour utiliser une autre base dn, suivez l'exemple de définition de serveur ldap ci-dessous:

<security:ldap-server id="dummyLdap" ldif="classpath:users.ldif" port="33389" root="dc=stackoverflow,dc=com"> 
Questions connexes