ldap的增刪改查基本操作

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/lost_wen/article/details/62416806
public class Factory
{

    private static Ldap instance;
    public synchronized static Ldap creatInstance(){
        if(instance==null){
            try
            {
                String className="com.zte.dap.uima.ldap.LdapImpl";
                Class<?> c=Class.forName(className);
                instance=(Ldap) c.newInstance();
                //instance=(Ldap) Class.forName("LdapImpl").newInstance();
            }
            catch (Exception e)
            {
                throw new RuntimeException();
            }
           
        }
        return instance;
    }
    
}



public interface Ldap
{

    public void connect() throws NamingException;
    public String search(String para) throws NamingException;
    public void update() throws NamingException;
    public void add() throws NamingException;
    public void delete() throws NamingException;
    public void close() throws NamingException;
}




public class LdapImpl implements Ldap
{
    private DirContext ds;
    
    @Override
    public synchronized void connect() throws NamingException
    {
        Hashtable<String, Object> env=new Hashtable<String,Object>(11);
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, "ldap://10.43.139.211:389");
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, "cn=root,o=ZTE,c=cn");
        env.put(Context.SECURITY_CREDENTIALS, "secret");
        ds=new InitialDirContext(env);
    }

    @Override
    public String search(String para) throws NamingException
    {
        String password=null;
        SearchControls searchCtls=new SearchControls();
        searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
        String searchFilter="uid="+para;
        String searchBase="o=ZTE,c=cn";
        String returnedAttrs[]={"userPassword"};
        searchCtls.setReturningAttributes(returnedAttrs);
        NamingEnumeration<SearchResult> entries=ds.search(searchBase, searchFilter, searchCtls);
        while(entries.hasMoreElements()){
            SearchResult entry=entries.next();
            Attributes attrs=entry.getAttributes();
            if(attrs!=null){
                for(NamingEnumeration<? extends Attribute> names=attrs.getAll();names.hasMore();){
                    Attribute attr=names.next();
                    for(NamingEnumeration<?> e =attr.getAll();e.hasMore();){
                        byte[] s=(byte[]) e.next();
                        password=new String(s);
                    }
                }
            }
        }
        return password;
    }

    @Override
    public void update() throws NamingException
    {
        ModificationItem[] mods=new ModificationItem[1];
        Attribute attr=new BasicAttribute("sn","張三");
        mods[0]=new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attr);
        ds.modifyAttributes("uid=test,o=founder,c=com", mods);
    }

    @Override
    public void add() throws NamingException
    {
        Attributes attrs=new BasicAttributes();
        attrs.put("uid","test");
        attrs.put("sn","test");
        attrs.put("cn","test Test");
        attrs.put("userPassword", "222222");
        Attribute objclass=new BasicAttribute("objectClass");
        objclass.add("inetOrgPerson");
        attrs.put(objclass);
        this.ds.createSubcontext("uid=test,ou=users,o=ZTE,c=cn", attrs);
    }

    @Override
    public void delete() throws NamingException
    {
        this.ds.destroySubcontext("uid=test,o=founder,c=com");
    }

    @Override
    public void close() throws NamingException
    {
        ds.close();
    }

}





public class TestLdap
{
    public static void main(String[] args) throws NamingException
    {
        Ldap ldap=Factory.creatInstance();
        ldap.connect();
        try {
            // add uid=test,ou=tester,dc=ibm,dc=com
            //ldap.add();
            // search uid=test
            ldap.search("test");
            // update cn with new value of "changed name"
            //ldap.update();
            // search uid=test to see cn value.
            //ldap.search();
            // delete uid=test,ou=tester,dc=ibm,dc=com
            //ldap.delete();
            // search again.
            //ldap.search();
        } finally {
            ldap.close();
        }
        
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章