Ошибка аутентификации Grails LDAP - PullRequest
0 голосов
/ 18 февраля 2010

Я разрабатываю веб-приложение, используя 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))'
}

Ответы [ 3 ]

1 голос
/ 13 сентября 2010

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

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

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

Стивен

0 голосов
/ 29 сентября 2010

Просто добавьте «ldapUsePassword = false» в файл securityconfig:

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

0 голосов
/ 02 мая 2010

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

Исправление, которое я нашел, не очень приятно, но помогает запустить и запустить плагин. Вы должны изменить одно поле в следующем файле: ~ / .Grails // Проекты // плагины / Acegi-0.5.3 / SRC / Java / орг / Codehaus / заводной / Grails / плагины / springsecurity / GrailsUserImpl.java или на окнах: C:. / Users // Grails // Проекты // плагины / Acegi-0.5.3 / SRC / Java / орг / Codehaus / заводной / Grails / плагины / springsecurity / GrailsUserImpl.java

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

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

, который необходимо изменить на:

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

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

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

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

ш, Тим

...