Я Разрабатываю приложение в Spring MVC и JPA с Spring Security.Теперь интеграция OUD (Oracle Unified Directory) через LDAP.При аутентификации пользователя ответ от LDAP в файле журнала OUD составляет
CONNECT conn = 909681 от ******* к *******: протокол 1636 = LDAPS
Bind REQ conn = 909681 op = 0 msgID = 1 type = SIMPLE dn = "" версия = 3
BindRES conn = 909681 op = 0 msgID = 1 result = 1 message = "Серверу каталогов не удалось найти сетевую группу для привязки dn" ", поскольку соединение клиента не соответствует критериям подключения ни для одной из сетевых групп."
DISCONNECT conn = 909681 reason = "Отключение клиента"
Отображение между приложением и LDAP в файле security.xml
<bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
<constructor-arg value="ldaps://192.168.0.182:1636/o=company"/>
<property name="userDn" value="cn=userid,o=company,ou=groups"/>
<property name="password" value="password"/>
</bean>
<bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider" >
<constructor-arg>
<bean class="in.web.service.impl.CustomLdapBindAuthenticator">
<constructor-arg ref="contextSource"/>
<property name="userDnPatterns">
<list>
<value>cn={0},ou=groups</value>
</list>
</property>
</bean>
</constructor-arg>
<constructor-arg>
<bean class="in.web.service.impl.CustomLdapUserAuthoritiesPopulator">
</bean>
</constructor-arg>
</bean>
Код в CustomLdapBindAuthenticator
public LdapUserDetails search(String cn) throws Exception {
Hashtable env = new Hashtable();
String sp = "com.sun.jndi.ldap.LdapCtxFactory";
env.put(Context.INITIAL_CONTEXT_FACTORY, sp);
String [] urls = contextSource.getUrls();
for(String url: urls){
System.out.println("ldapurls="+url);
}
env.put(Context.PROVIDER_URL, urls[0]);
DirContext dctx = new InitialDirContext(env);
String base = "ou=groups,o=company";
System.out.println("BASE DN="+base);
SearchControls sc = new SearchControls();
String[] attributeFilter = {"cn", "fullName", "mail", "l", "mobile"};
sc.setReturningAttributes(attributeFilter);
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
String filter = "(&(cn="+cn+")(objectClass=*))";
NamingEnumeration results = dctx.search(base, filter, sc);
LdapUserDetails user = new LdapUserDetails();
while (results.hasMore()) {
SearchResult sr = (SearchResult) results.next();
Attributes attrs = sr.getAttributes();
user.setCn(getAttribute(attrs, "cn"));
user.setFullName(getAttribute(attrs, "fullName"));
user.setMail(getAttribute(attrs, "mail"));
user.setMobile(getAttribute(attrs, "mobile"));
user.setLocation(getAttribute(attrs, "l"));
}
dctx.close();
return user;
}
Пл.Помогите мне решить проблемы
- Я не упомянул аутентификацию как простую.Откуда я получаю type = simple в файле журнала
- Почему я получаю dn = ""
Заранее спасибо