====== JNDI / LDAP ======
Рабочий пример:
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.*;
import java.util.Hashtable;
/**
* User: gmc
* Date: 16/02/11
* http://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/LdapBasicExample.java?r=2
*/
public class LdapBasicExample {
public static void main(String[] args) {
String userName = "ldapaccess"; // Логин входа в АД
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://192.168.2.250:389/dc=firma,dc=ua"); // Адрес сервера
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, new String("firma" + "\\" + userName));
env.put(Context.SECURITY_CREDENTIALS, "ldapaccess"); // Пароль
env.put(Context.REFERRAL, "follow");
env.put("com.sun.jndi.ldap.read.timeout", "500"); // Настройка таймаута. Но не помогает :(
DirContext ctx = null;
NamingEnumeration results = null;
try {
ctx = new InitialDirContext(env);
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
controls.getCountLimit();
// String usersName = "ldapaccess";
// String filter = "(userid="+usersName+")";
// String filter = "(objectclass=person)&(userid=" + usersName + ")";
// String filter = "(objectclass=person)";
String filter = "(mail=*)"; // Фильтр поиска
String base="";
results = ctx.search(base, filter, controls);
while (results.hasMore()) {
SearchResult searchResult = (SearchResult) results.next();
Attributes attributes = searchResult.getAttributes();
Attribute attr = attributes.get("cn");
String cn = (String) attr.get();
System.out.println(" Person Common Name = " + attributes.get("cn"));
// System.out.println(" Person Display Name = " + attributes.get("displayName"));
System.out.println(" Person e-mail = " + attributes.get("mail"));
//System.out.println(" Person logonhours = " + attributes.get("logonhours"));
// System.out.println(" Person MemberOf = " + attributes.get("memberOf"));
}
} catch (Throwable e) {
e.printStackTrace();
} finally {
if (results != null) {
try {
results.close();
} catch (Exception e) {
}
}
if (ctx != null) {
try {
ctx.close();
} catch (Exception e) {
}
}
}
}
}
javax.naming.PartialResultException [Root exception is javax.naming.CommunicationException: firma.UA:389 [Root exception is java.net.ConnectException: Connection timed out: connect]]
at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreImpl(LdapNamingEnumeration.java:242)
at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreReferrals(LdapNamingEnumeration.java:380)
at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreImpl(LdapNamingEnumeration.java:226)
at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreReferrals(LdapNamingEnumeration.java:380)
at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreImpl(LdapNamingEnumeration.java:226)
at com.sun.jndi.ldap.LdapNamingEnumeration.hasMore(LdapNamingEnumeration.java:189)
at LdapBasicExample.main(LdapBasicExample.java:41)
Caused by: javax.naming.CommunicationException: firma.UA:389 [Root exception is java.net.ConnectException: Connection timed out: connect]
at com.sun.jndi.ldap.LdapReferralContext.(LdapReferralContext.java:92)
at com.sun.jndi.ldap.LdapReferralException.getReferralContext(LdapReferralException.java:150)
at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreReferrals(LdapNamingEnumeration.java:357)
at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreImpl(LdapNamingEnumeration.java:226)
... 6 more
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.(Socket.java:425)
at java.net.Socket.(Socket.java:208)
at com.sun.jndi.ldap.Connection.createSocket(Connection.java:366)
at com.sun.jndi.ldap.Connection.(Connection.java:201)
at com.sun.jndi.ldap.LdapClient.(LdapClient.java:136)
at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1600)
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2698)
at com.sun.jndi.ldap.LdapCtx.(LdapCtx.java:316)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:193)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:152)
at com.sun.jndi.url.ldap.ldapURLContextFactory.getObjectInstance(ldapURLContextFactory.java:52)
at javax.naming.spi.NamingManager.getURLObject(NamingManager.java:601)
at javax.naming.spi.NamingManager.processURL(NamingManager.java:381)
at javax.naming.spi.NamingManager.processURLAddrs(NamingManager.java:361)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:333)
at com.sun.jndi.ldap.LdapReferralContext.(LdapReferralContext.java:111)
... 9 more
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 21 секунды)
[[http://docs.oracle.com/javase/tutorial/jndi/ldap/rename.html|More LDAP Operations]
[[http://docs.oracle.com/javase/tutorial/jndi/ldap/result.html|LDAP. Search Results]]
[[http://spec-zone.ru/RU/Java/Tutorials/jndi/ldap/result.html|LDAP. Search Results. rus]]
[[http://docs.oracle.com/javase/jndi/tutorial/index.html|The JNDI Tutorial]]
[[http://docs.oracle.com/javase/7/docs/technotes/guides/jndi/|Java™ Naming and Directory Interface (JNDI)]]
[[http://stackoverflow.com/questions/2990085/read-ldap-with-java|read LDAP with Java]]
[[http://www.adamretter.org.uk/blog/entries/LDAPTest.java]]
[[http://www.java2s.com/Code/Java/JNDI-LDAP/LDAPSearch.htm]]
[[http://websphere.novsu.ac.ru/course/portal/InfoCenter_ru/wpf/sec_map_ldap.html|Работа с атрибутами LDAP]]
[[http://spec-zone.ru/RU/Java/Docs/7/api/javax/naming/ldap/package-summary.html|Пакет javax.naming.ldap . rus]]
[[http://www.sql.ru/forum/1072676/vse-zaprosy-k-ldap-zavershautsya-exception|Все запросы к LDAP завершаются exception ]]
ldapwiki.willeke.com/wiki/LDAP
[[http://www.oszone.net/14239/attributes|MS AD. Настройка атрибутов учетных записей пользователей]]