Spring LDAP - binden für die erfolgreiche Verbindung

Ich versuche, sich zu authentifizieren und dann Fragen zu unserer Unternehmens-LDAP-mit Spring LDAP und Spring security. Ich schaffte Authentifizierung arbeiten, aber wenn ich Versuch zu laufen, Suche ich bekomme immer die folgende Ausnahme

Um diesen Vorgang auszuführen eine erfolgreiche Bindung muss abgeschlossen sein, auf die Verbindung

Nach viel recherche habe ich eine Theorie, dass, nachdem ich zu authentifizieren und bevor ich eine Abfrage, die ich zu binden, müssen Verbindung. Ich weiß nur nicht was und wie?

Nur zu erwähnen - ich kann navigieren und durchsuchen Sie unsere LDAP mit JXplorer also meine Parameter korrekt sind.

Hier ein Abschnitt von meinem securityContext.xml

<security:http auto-config='true'>
    <security:intercept-url pattern="/reports/goodbye.html" 
            access="ROLE_LOGOUT" />
    <security:intercept-url pattern="/reports/**" access="ROLE_USER" />
    <security:http-basic />
    <security:logout logout-url="/reports/logout" 
            logout-success-url="/reports/goodbye.html" />
</security:http>
<security:ldap-server url="ldap://s140.foo.com:1389/dc=td,dc=foo,dc=com" />
<security:authentication-manager>
    <security:authentication-provider ref="ldapAuthProvider">
</security:authentication-provider>
</security:authentication-manager>
<!-- Security beans -->
<bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
    <constructor-arg value="ldap://s140.foo.com:1389/dc=td,dc=foo,dc=com" />
</bean>
<bean id="ldapAuthProvider" 
   class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
    <constructor-arg>
        <bean class="foo.bar.reporting.server.security.ldap.LdapAuthenticatorImpl">
            <property name="contextFactory" ref="contextSource" />
            <property name="principalPrefix" value="TD\" />
            <property name="employee" ref="employee"></property>
        </bean>
    </constructor-arg>
    <constructor-arg>
      <bean class="foo.bar.reporting.server.security.ldap.LdapAuthoritiesPopulator" />
    </constructor-arg>
</bean>
<!-- DAOs -->
<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
  <constructor-arg ref="contextSource" />

Hier das code-snippet aus LdapAuthenticatorImpl, der die Authentifizierung durchführt. Kein problem hier:

@Override
public DirContextOperations authenticate(final Authentication authentication) {
    //Grab the username and password out of the authentication object.
    final String name = authentication.getName();
    final String principal = this.principalPrefix + name;
    String password = "";
    if (authentication.getCredentials() != null) {
        password = authentication.getCredentials().toString();
    }
    if (!("".equals(principal.trim())) && !("".equals(password.trim()))) {
        final InitialLdapContext ldapContext = (InitialLdapContext)
     this.contextFactory.getContext(principal, password);
        //We need to pass the context back out, so that the auth provider 
        //can add it to the Authentication object.
        final DirContextOperations authAdapter = new DirContextAdapter();
        authAdapter.addAttributeValue("ldapContext", ldapContext);
        this.employee.setqId(name);
        return authAdapter;
    } else {
        throw new BadCredentialsException("Blank username and/or password!");
    }
}

Und hier ist noch ein code-snippet aus EmployeeDao mit meinem vergeblichen Versuch, Abfrage:

public List<Employee> queryEmployeesByName(String query) 
   throws BARServerException {
    AndFilter filter = new AndFilter();
    filter.and(new EqualsFilter("objectclass", "person"));
    filter.and(new WhitespaceWildcardsFilter("cn", query));
    try {
        //the following line throws bind exception
        List result = ldapTemplate.search(BASE, filter.encode(), 
            new AttributesMapper() {
            @Override
            public Employee mapFromAttributes(Attributes attrs) 
                throws NamingException {
                Employee emp = new Employee((String) attrs.get("cn").get(), 
                   (String) attrs.get("cn").get(),
                        (String) attrs.get("cn").get());
                return emp;
            }
        });
        return result;
    } catch (Exception e) { 
        throw new BarServerException("Failed to query LDAP", e);
    }
}

Und schließlich - die Ausnahme, ich bin immer

org.springframework.ldap.UncategorizedLdapException: 
    Uncategorized exception occured during LDAP processing; nested exception is 
    javax.naming.NamingException: [LDAP: error code 1 - 00000000: LdapErr: 
    DSID-0C090627, comment: In order to perform this operation a successful bind 
    must be completed on the connection., data 0, vece]; remaining name 
    'DC=TD,DC=FOO,DC=COM'
  • Ich weiß, das ist alt, aber @Bostone können Sie mir helfen, Sortieren Sie diese aus. Ich bin immer genau die gleiche Ausnahme, aber ich bin immer diese Fehlermeldung auf der login-Seite, wo Benutzer zum ersten mal öffnet Anmeldeinformationen. Die ldap-erfolgreich zurückgegeben wird, wenn Sie Benutzernamen und Passwort korrekt eingegeben, aber ich bekomme folgenden Fehler: [LDAP: error code 1 - 00000000: LdapErr: DSID-0C090627, Kommentar: um diesen Vorgang auszuführen eine erfolgreiche Bindung muss abgeschlossen sein, auf die Verbindung., Daten 0, zum Abendessen schwebt ]; verbliebenen Namen "
  • bitte siehe meine Antwort unten. Bei mir hat es geklappt
InformationsquelleAutor Bostone | 2011-03-10
Schreibe einen Kommentar