以前的收藏~o~
 回复人: cbhyk() ( ) 信誉:100  2004-02-19 10:17:44Z  得分: 5  
 
 
   
SUNOne:1.连接import java.util.Hashtable;import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;public class ActiveDirectoryConntct1
{
    public static void main(String[] args)
    {
        String account="user1";
        String password="password1";
        String root="dc=test,dc=com"; //root        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, "ldap://192.168.0.1:389/" + root);
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, "uid=" + account + "," + root);
        env.put(Context.SECURITY_CREDENTIALS, password);        DirContext ctx = null;
        try
        {
            ctx = new InitialDirContext(env);
            System.out.println("认证成功");
        }
        catch(javax.naming.AuthenticationException e)
        {
            System.out.println("认证失败");
        }
        catch(Exception e)
        {
            System.out.println("认证出错:");
            e.printStackTrace();
        }        if(ctx != null)
        {
            try
            {
                ctx.close();
            }
            catch (NamingException e)
            {
                //ignore
            }
        }
        System.exit(0);
    }
}2.查询
DirContext ctx = ...
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
//constraints.setSearchScope(SearchControls.ONELEVEL_SCOPE);
NamingEnumeration en = ctx.search("", "uid=*", constraints); //查询所有用户
while (en != null && en.hasMoreElements())
{
    Object obj = en.nextElement();
    if(obj instanceof SearchResult)
    {
        SearchResult si = (SearchResult) obj;
    
        System.out.println("name: " + si.getName());
    
        Attributes attrs = si.getAttributes();
        if (attrs == null)
        {
            System.out.println("No attributes");
        }
        else
        {
            for (NamingEnumeration ae = attrs.getAll(); ae.hasMoreElements();)
            {
                Attribute attr = (Attribute) ae.next();
                String attrId = attr.getID();
    
                for (Enumeration vals = attr.getAll();vals.hasMoreElements();)
                {
                    System.out.print(attrId + ": ");
                    Object o = vals.nextElement();
                    if(o instanceof byte[])
                        System.out.println(new String((byte[])o));
                    else
                        System.out.println(o);
                }
            }
        }
    }
    else
    {
        System.out.println(obj);
    }
    System.out.println();
}
...
ctx.close();3.添加
DirContext ctx = ...;
String newUserName = "user2";BasicAttributes attrs = new BasicAttributes();BasicAttribute objclassSet = new BasicAttribute("objectclass");
objclassSet.add("person"); 
objclassSet.add("top"); 
objclassSet.add("organizationalPerson"); 
objclassSet.add("inetOrgPerson");attrs.put(objclassSet);
attrs.put("sn", newUserName);
attrs.put("uid", newUserName);ctx.createSubcontext("uid=" + newUserName, attributes);
...
4.删除
String account = "user2";
DirContext ctx = ...;
ctx.destroySubcontext("uid=" + account);
5.修改
String account = "user2";
String newDisplayName = "newDisplayName";ModificationItem modificationItem[] = new ModificationItem[1];
modificationItem[0] =
new ModificationItem(
DirContext.REPLACE_ATTRIBUTE,
new BasicAttribute("displayName", newDisplayName);DirContext ctx = ...;
ctx.modifyAttributes("uid=" + account, modificationItem);  
 
Top