Ошибка аутентификации Grails LDAP

Я разрабатываю веб-приложение, используя Grails и используя Grails LDAP в качестве механизма аутентификации. Однако я всегда получаю следующую ошибку:

{Ошибка 500: невозможно передать нулевые или пустые значения конструктору. Сервлет: URI по умолчанию: /ldap-app/j_spring_security_check Сообщение об исключении: невозможно передать нулевые или пустые значения конструктору Причина: невозможно передать нулевые или пустые значения конструктору Класс: GrailsAuthenticationProcessingFilter }

Мой файл SecurityConfig.groovy:

security {
   // see DefaultSecurityConfig.groovy for all settable/overridable properties
    active = true
    loginUserDomainClass = "User"
    authorityDomainClass = "Role"
    requestMapClass = "Requestmap"

    useLdap = true
    ldapRetrieveDatabaseRoles = false
    ldapRetrieveGroupRoles = false
    ldapServer = 'ldap://worf-mi.dapc.kao.au:389'
    ldapManagerDn = 'CN=sa-ldap-its,OU=Unix Servers for Kerberos,OU=Information Technology Services,OU=Special Accounts,DC=nexus,DC=dpac,DC=cn'
    ldapManagerPassword = 'Asdf1234'
    ldapSearchBase = 'OU=People,DC=nexus,DC=dpac,DC=cn'
    ldapSearchFilter = '(&(cn={0})(objectClass=user))'
}

person Leo    schedule 18.02.2010    source источник


Ответы (3)


У меня была такая же проблема, прочитал решение выше и сделал что-то еще. Вместо изменения GrailsUserImpl.java я просто изменил пароль в пользовательской таблице с NULL на '' (пустая строка). Поскольку пароль не используется для LDAP, будет передана пустая строка (вместо значения NULL), что имеет тот же эффект, что и

super(username, "", enabled, accountNonExpired, 
credentialsNonExpired, accountNonLocked, authorities);

но это не влияет на исходный код. Это сработало для моего проекта, надеюсь, это тоже помогло.

Стивен

person Steven    schedule 12.09.2010

у меня была такая же проблема, и я нашел решение. Эта ошибка возникает из-за того, что Acegi-Plugin пытается сохранить пароль пользователей Ldap в объекте User. На самом деле в зависимости от настроек LDAP-сервера не разрешено извлекать пароль, поэтому конструктору передается пустое значение, как сообщает сообщение об ошибке.

Исправление, которое я нашел, не очень хорошее, но помогает запустить плагин. Вам нужно изменить одно поле в следующем файле: ~/.grails//projects//plugins/acegi-0.5.3/src/java/org/codehaus/groovy/grails/plugins/springsecurity/GrailsUserImpl.java или в Windows : C:/Users//.grails//projects//plugins/acegi-0.5.3/src/java/org/codehaus/groovy/grails/plugins/springsecurity/GrailsUserImpl.java

Конструктор GrailsUserImpl() имеет следующее тело:

super(username, password, enabled, accountNonExpired,
credentialsNonExpired, accountNonLocked, authorities);

который нужно изменить на:

super(username, "", enabled, accountNonExpired,
credentialsNonExpired, accountNonLocked, authorities);

К сожалению, это необходимо делать для каждого клиента-разработчика и каждого нового проекта. Но в конце концов он запускает аутентификацию ldap.

Как я читал, они работают над этой ошибкой и пытаются исправить ее с помощью версии 0.6 плагина.

Надеюсь, я смог помочь.

бр, Тим

person timtu    schedule 02.05.2010

Просто добавьте «ldapUsePassword = false» в файл конфигурации безопасности:

Также важно установить для ldapUsePassword значение false. Мы говорим плагину Acegi не извлекать пароль пользователя из Active Directory. Если вы не установите для этого параметра значение false, вы получите прекрасное исключение, которое не особенно полезно, java.lang.IllegalArgumentException: Невозможно передавать нулевые или пустые значения в конструктор. Это пытается сказать вам, что пароль пользователя равен нулю, что правильно, поскольку настройка по умолчанию для плагина Acegi заключается в том, чтобы попытаться извлечь пароль пользователя из Active Directory, и мы не сообщили Acegi, какой атрибут хранит Active Directory. введите пароль. Установив для ldapUsePassword значение false, плагин предоставляет поддельный пароль для сведений о пользователе, и мы можем продолжить работу без инцидентов.

person Lucho    schedule 29.09.2010