Проблема
Реализовать аутентификацию по Active Directory в приложении, построенном на Wavemaker 6.5.3, c использованием в качестве логина sAMAccountName.
Решение
Через UI настройек безопасности поиск по sAMAccountName не организовать, т.к. там единственный вариант поиска пользователя - это userDnPattern:
Нам же нужно задать не шаблон для DN, а поиск по атрибуту sAMAccountName. Выход - идем Source -> Resources, в Folder Shortcuts выбираем "Project", там открываем файл WEB-INF/project-security.xml. В нем добавляем бин:
<bean id="userSearch"
class="org.acegisecurity.ldap.search.FilterBasedLdapUserSearch">
<constructor-arg index="0">
<value>OU=Users</value>
</constructor-arg>
<constructor-arg index="1">
<value>(sAMAccountName={0})</value>
</constructor-arg>
<constructor-arg index="2">
<ref local="initialDirContextFactory"/>
</constructor-arg>
<property name="searchSubtree">
<value>true</value>
</property>
</bean>
Первый аргумент конструктора нужно поправить в соответствие с базовым узлом для поиска по sAMAccountName. Базовый узел указывается относительно указанного в URL-е LDAP (в моем случае - относительно DC=my,DC=domain).
Далее необходимо исправить первый аргумент конструктора бина ldapAuthProvider с:
<constructor-arg>
<bean class="org.acegisecurity.providers.ldap.authenticator.BindAuthenticator">
<constructor-arg>
<ref local="initialDirContextFactory"/>
</constructor-arg>
<property name="userDnPatterns">
<list>
<value>cn={0},ou=Users</value>
</list>
</property>
</bean>
</constructor-arg>
на
<constructor-arg>Все, можно заходить в приложение по sAMAccountName и паролю из AD.
<bean class="org.acegisecurity.providers.ldap.authenticator.BindAuthenticator">
<constructor-arg>
<ref local="initialDirContextFactory"/>
</constructor-arg>
<property name="userSearch">
<ref bean="userSearch"/>
</property>
</bean>
</constructor-arg>
PS Спасибо http://dev.wavemaker.com/forums/?q=node/7096
Комментариев нет:
Отправить комментарий