封装jndi操作ldap服务器的工具类


以下是一个简化的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和密码等信息,这些信息在上面的代码中以字符串常量的形式给出,但在实际应用中可能需要从配置文件或环境变量中动态获取。