从Java应用程序连接LDAP服务器

时间:2010-05-21 09:35:27

标签: java ldap gxt

我正在构建一个基于GXT(J2EE)的应用程序。现在的问题是我必须将应用程序连接到LDAP服务器。您能告诉我如何从我们的Java应用程序连接LDAP服务器以及我将使用哪些库或API?

3 个答案:

答案 0 :(得分:9)

要连接到LDAP,请查看以下包/类:

javax.naming.directory.*
javax.naming.ladp.*
com.sun.jndi.ldap.LdapCtxFactory
com.sun.jndi.ldap.ControlFactory

示例代码:

//build a hashtable containing all the necessary configuration parameters
Hashtable<String, String> environment = new Hashtable<String, String>();

environment.put(LdapContext.CONTROL_FACTORIES, conf.getProperty("ldap.factories.control"));
environment.put(Context.INITIAL_CONTEXT_FACTORY, conf.getProperty("ldap.factories.initctx"));
environment.put(Context.PROVIDER_URL, conf.getProperty("ldap.host"));
environment.put(Context.SECURITY_AUTHENTICATION, "simple");
environment.put(Context.SECURITY_PRINCIPAL, conf.getProperty("ldap.user"));
environment.put(Context.SECURITY_CREDENTIALS, conf.getProperty("ldap.password"));
environment.put(Context.STATE_FACTORIES, "PersonStateFactory");
environment.put(Context.OBJECT_FACTORIES, "PersonObjectFactory");

// connect to LDAP
DirContext ctx = new InitialDirContext(environment);

// Specify the search filter
String FILTER = "(&(objectClass=Person) ((sAMAccountName=" + user.getUsername() + ")))";

// limit returned attributes to those we care about
String[] attrIDs = { "sn", "givenName" };

SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(attrIDs);
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);

// Search for objects using filter and controls
NamingEnumeration answer = ctx.search(searchBase, FILTER, ctls);

...

SearchResult sr = (SearchResult) answer.next();
Attributes attrs = sr.getAttributes();
surName = attrs.get("sn").toString();
givenName = attrs.get("givenName").toString();
...

在这个例子中,我有一个Configuration对象,它从配置文件中读取这些值。

值将是:

# LDAP parameters
ldap.host = ldap://ldap.mydomain.com:389
ldap.factories.initctx = com.sun.jndi.ldap.LdapCtxFactory
ldap.factories.control = com.sun.jndi.ldap.ControlFactory
ldap.searchbase = dc=mydomain,dc=us
ldap.user = MYDOMAIN.COM\\ldap-user
ldap.userBase= MYDOMAIN.COM\\
ldap.password = ******

答案 1 :(得分:3)

  • 使用JNDI(Java Naming和。)连接到LDAP服务器 目录接口)Java中的API。
  • JNDI的接口,类和异常可在 以下软件包随JDK一起提供:

    • javax.naming中。*
    • javax.naming.directory。*
  • 这意味着我们不必使用任何外部库来工作 在大多数情况下,使用LDAP服务器。

  • 指定LDAP服务器的URL由主机名组成 LDAP服务器正在运行端口号。一个众所周知的端口号 轻量级目录访问协议是389,这是默认的。

  • 还需要为连接指定一些环境属性 和Hashtable对象中的身份验证。

以下是示例代码:

java.util.Properties

答案 2 :(得分:-1)

您甚至可以使用当前未处于活动状态但在LDAP编程中提供更多控制的 Netscape LDAP SDK