簡體   English   中英

想要刪除ldap節點並刪除其下的所有子樹節點

[英]Wanted to delete ldap node and delete all the subtree node under it

我想刪除ldap節點並刪除其下的所有子樹節點。 例如,我要刪除ou = F115630019及其子節點,即快照中顯示的cn = xxxxx和ou = 115630019。

在此處輸入圖片說明

在運行以下代碼時,我遇到以下錯誤。請讓我知道如何解決此問題。

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1911)
    at deleteorg.deleteDN(deleteorg.java:28)
    at deleteorg.deleteDN(deleteorg.java:58)
    at deleteorg.main(deleteorg.java:96)

Java代碼:-

  import java.util.*;
    import javax.naming.Context;
    import javax.naming.ContextNotEmptyException;
    import javax.naming.NameNotFoundException;
    import javax.naming.NamingEnumeration;
    import javax.naming.NamingException;
    import javax.naming.directory.Attributes;
    import javax.naming.directory.BasicAttributes;
    import javax.naming.directory.DirContext;
    import javax.naming.directory.InitialDirContext;
    import javax.naming.directory.SearchControls;
    import javax.naming.directory.SearchResult;

    public class deleteorg {

        public boolean deleteDN(String srchost, String srcport, String srcuserId,String srcpasswd, String srcBaseDn, String deleteDn) {
            String attribList = "";
            String temp = null;
            try {
                DirContext srcCtx = createContext(srchost, srcport, srcBaseDn,
                        srcuserId, srcpasswd);

                SearchControls srcont = new SearchControls();
                srcont.setSearchScope(SearchControls.SUBTREE_SCOPE);
                int i = deleteDn.indexOf(",");
                System.out.println("i: "+i);
                System.out.println("deleteDN="+deleteDn);
                deleteDn = deleteDn.substring(0,deleteDn.indexOf(","));
                System.out.println("index->>"+i+"------" + deleteDn);

                NamingEnumeration answer = null;
                try {
                 answer = srcCtx.search(deleteDn, "objectclass=*", srcont);
                 System.out.println("Answer"+ answer);
                } catch (NameNotFoundException ne) {
                    System.out.println("name not found exception");
                }
                if (answer != null) {
                    while (answer.hasMore()) {
                        Attributes attrs = new BasicAttributes(true);
                        System.out.println("Attr"+ attrs);
                        SearchResult sr = (SearchResult) answer.next();
                        System.out.println("Search Result"+sr);
                        String addDN = sr.getName() + "," + deleteDn;
                        System.out.println("adDN"+addDN);
                        String attribnamevalues = "";
                        if (addDN.indexOf(',') == 0)
                            addDN = addDN.substring(1); // get rid of the leading
                                                        // ","

                        try {
                            System.out.println("AddDN"+addDN);
                            srcCtx.destroySubcontext(addDN);
                    System.out.println("destroyed");
                        } catch (ContextNotEmptyException e) {
                        }
                    }
                    deleteDN(srchost, srcport, srcuserId, srcpasswd, srcBaseDn,
                            deleteDn);
                }
                srcCtx.close();
                return true;
            } catch (NamingException e) {
                e.printStackTrace();
                return false;
            }
        }

        public DirContext createContext(String servername, String port, String basedn, String username, String password) {
            System.out.println("sername=" + servername + "#port=" + port + "#baseDn="+ basedn + "#uid=" + username + "#pwd=" + password);

            DirContext ctx;
            Hashtable<String, String> env = new Hashtable<String, String>();
            env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, "ldap://" + servername + ":" + port + "/"
                    + basedn);
            env.put(Context.SECURITY_PRINCIPAL, username);
            env.put(Context.SECURITY_CREDENTIALS, password);
            env.put(Context.SECURITY_AUTHENTICATION, "simple");

            try {
                ctx = new InitialDirContext(env);
                return (ctx);

            } catch (NamingException e) {
                e.printStackTrace();
                return (null);
            }
        }


        public static void main(String[] args) {

            deleteorg ctx = new deleteorg();

            ctx.deleteDN("localhost", "1389","cn=Directory Manager","Welcome1","ou=organizations,dc=xyz,dc=com","ou=F115630019  ,ou=organizations,dc=xyz,dc=com");


        }

    }

只能從ldap中刪除葉節點。 您需要按照以下步驟。

  1. 遍歷subtre,找到最后一個元素
  2. 以相反的順序刪除此節點並向上移動,直到到達目標/突出顯示的節點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM