Spring Security 3.1 ActiveDirectoryLdapAuthenticationProvider, возвращающий частичное исключение результата - PullRequest
2 голосов
/ 17 февраля 2012

Я пытаюсь аутентифицировать пользователей в экземпляре Active Directory с использованием Spring Security, я получаю исключение частичных результатов.Я иду по кругу, пытаясь понять это.Ниже моя конфигурация.

security-app-context

<authentication-manager erase-credentials="true">
        <authentication-provider>
            <user-service>
                <user name="admin@damien.com" authorities="ROLE_ADMINISTRATOR" password="123admin123" />
            </user-service>
        </authentication-provider>
        <authentication-provider ref="ldapActiveDirectoryAuthProvider"/>
</authentication-manager>

<bean id="ldapActiveDirectoryAuthProvider"
      class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider">
    <constructor-arg value="myDomain.com" />
    <constructor-arg value="ldap://ldapurl:389/" />
    <property name="convertSubErrorCodesToExceptions" value="true"/>
</bean>  

Ошибка, которую я получаю

 org.springframework.dao.IncorrectResultSizeDataAccessException: Incorrect result size: expected 1, actual 0        org.springframework.security.ldap.SpringSecurityLdapTemplate.searchForSingleEntryInternal(SpringSecurityLdapTemplate.java:239)

Я изо всех сил пытаюсь найти примеры, и документация указывает, что яработает в правильном направлении.

Это из журналов

SpringSecurityLdapTemplate.java 213 - Searching for entry under DN '', base = 'dc=myDomain,dc=com', filter = '(&(objectClass=user)(userPrincipalName={0}))'

, и это то, что я ожидаю, чтобы это выглядело при успешной попытке некоторых скриптов, которые работают

Searching for entry under DN 'OU=Users and Groups,DC=one,DC=two,DC=myDomain,DC=com', base = 'OU=Users and Groups,DC=one,DC=two,DC=myDomain,DC=com', filter = '(&(objectClass=user)(userPrincipalName={0}))'

DoМне нужно, чтобы заполнить DN?Как?Я просмотрел свойства ActiveDirectoryLdapAuthenticationProvider и не вижу пути?Также база отключена, но myDomain.com является правильным доменом для пользователей, например, john.doe@myDomain.com.Кто-нибудь сталкивался с подобной проблемой?

1 Ответ

1 голос
/ 06 марта 2012

Для решения этой проблемы я использовал поставщика LDAP по умолчанию, который позволяет указать базу поиска пользователей, указав базу поиска пользователей и фильтр поиска пользователей.

<ldap-authentication-provider
    user-search-base="OU=Users and Groups,DC=abc,DC=myDomain,DC=com"
    user-search-filter="userPrincipalName={0}" />

Затем пользователь будет входить в систему с помощью john.doe@myDomain.com, но база пользовательского поиска более конкретна (abc.myDomain.com).Я полагаю, что из-за этого весна упала.

...