以下是一个简化的Java工具类示例,用于封装通过JNDI操作LDAP服务器的常用操作。请注意,为了保持简洁性,此示例不包括完整的错误处理和配置细节,这些在实际应用中是非常重要的。
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.*;
import java.util.Hashtable;
public class LdapUtil {
private static final String PROVIDER_URL = "ldap://your.ldap.server:389"; // LDAP服务器地址和端口
private static final String CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
private static final String SECURITY_AUTHENTICATION = "simple";
private static final String PRINCIPAL = "cn=admin,dc=example,dc=com"; // 绑定DN
private static final String CREDENTIALS = "password"; // 绑定密码
/**
* 连接到LDAP服务器
* @return 返回DirContext对象,用于执行后续操作
* @throws NamingException 如果发生JNDI错误
*/
public static DirContext connect() throws NamingException {
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, CONTEXT_FACTORY);
env.put(Context.PROVIDER_URL, PROVIDER_URL);
env.put(Context.SECURITY_AUTHENTICATION, SECURITY_AUTHENTICATION);
env.put(Context.SECURITY_PRINCIPAL, PRINCIPAL);
env.put(Context.SECURITY_CREDENTIALS, CREDENTIALS);
return DirContext.newInstance(PROVIDER_URL, env);
}
/**
* 执行LDAP搜索
* @param baseDn 搜索的基准DN
* @param filter 搜索过滤器
* @param attrs 需要返回的属性列表
* @return 返回搜索结果
* @throws NamingException 如果发生JNDI错误
*/
public static NamingEnumeration<SearchResult> search(String baseDn, String filter, String[] attrs) throws NamingException {
DirContext ctx = connect();
try {
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
return ctx.search(baseDn, filter, controls, attrs);
} finally {
ctx.close();
}
}
// 这里可以添加更多LDAP操作的方法,如添加、删除、修改等
// 注意:实际使用时,需要处理NamingException等异常,以及根据具体需求调整配置
}
这个工具类提供了两个基本方法:`connect()` 用于连接到LDAP服务器,并返回一个`DirContext`对象;`search()` 用于执行LDAP搜索操作。注意,这里的代码示例为了简洁而省略了完整的异常处理和配置灵活性。在实际应用中,您可能需要根据具体需求添加额外的功能,如支持不同的安全认证方式、配置连接池等。
另外,请确保您已经正确配置了LDAP服务器的地址、端口、绑定DN和密码等信息,这些信息在上面的代码中以字符串常量的形式给出,但在实际应用中可能需要从配置文件或环境变量中动态获取。