ldap增删改查

    技术2022-05-19  55

    package test2;

    import java.io.BufferedReader;

    import java.io.InputStreamReader;

    import java.util.Enumeration;

    import java.util.Properties;

    import javax.naming.NamingEnumeration;

    import javax.naming.NamingException;

    import javax.naming.directory.Attribute;

    import javax.naming.directory.Attributes;

    import javax.naming.directory.BasicAttribute;

    import javax.naming.directory.BasicAttributes;

    import javax.naming.directory.DirContext;

    import javax.naming.directory.InitialDirContext;

    import javax.naming.directory.ModificationItem;

    import javax.naming.directory.SearchControls;

    import javax.naming.directory.SearchResult;

     

    public class Test {

    public static DirContext dc; //相当于这个树的一个映像

    public static  void conn()

    {

    String dn="cn=Manager,dc=my-domain,dc=com"; //包括连接LDAP服务器的用户及要操作的根节点

    Properties env = new Properties();

    env.put(DirContext.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");

    env.put(DirContext.PROVIDER_URL, "ldap://localhost:" + 389);

    if (dn != null) {

          env.put(DirContext.SECURITY_PRINCIPAL, dn);

          env.put(DirContext.SECURITY_CREDENTIALS, "secret");

    }

    try {

    dc = new InitialDirContext(env);

    System.out.println("连接成功");

    } catch (NamingException e) {

    e.printStackTrace();

    }

    }

    public static void deleteInformation()

        {

               try {

                   dc.destroySubcontext("cn=mm,ou=ppeople,dc=my-domain,dc=com");

                   System.out.println("删除成功");

               } catch (NamingException ne) {

              ne.printStackTrace();

               }

        }

    public static void addInformation()

        {

               try

               {

                    Attributes attrs = new BasicAttributes();

                    attrs.put("uid", "alee");

          attrs.put("sn","Lee");

          attrs.put("telephoneNumber", "14085550017");

          attrs.put("userPassword","redqueen".getBytes());

          BasicAttribute objectclass = new BasicAttribute("objectclass");

          objectclass.add("uidObject");

          objectclass.add("person");

          attrs.put(objectclass);

                    dc.createSubcontext("cn=mm,ou=ppeople,dc=my-domain,dc=com", attrs);

                    System.out.println("添加成功");

     

               } catch (Exception ne) {

                    ne.printStackTrace();

                    System.out.println("添加失败");

               }

        }

    public static void modifyInformation(String dn)

        {

              try {

                  ModificationItem[] mods = new ModificationItem[1];

                  mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("sn", "qm"));// 所修改的属性

                  dc.modifyAttributes(dn,mods);

                  System.out.println("修改成功");

              } catch (NamingException ne) {

              ne.printStackTrace();

              }

        }

     

    public static void search() {// 我只能按照某些属性查找节点,偶还不会怎么查找一个目录或按照更复杂的正则式查找特定节点/目录

    try {

    SearchControls constraints = new SearchControls();

    constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

    System.out.print("what would you want to search:");

    BufferedReader bd = new BufferedReader(new InputStreamReader(System.in));

    String s = bd.readLine();

    NamingEnumeration en = dc.search("dc=my-domain,dc=com", "uid=" + s, constraints); // 要查询的UID。如果是*则可以查到所有UID的节点

    if (en == null) {

    System.out.println("Have no NamingEnumeration.");

    }

    if (!en.hasMoreElements()) {

    System.out.println("Have no element.");

    }

    while (en != null && en.hasMoreElements()) {// 可以查出多个元素

    Object obj = en.nextElement();

    if (obj instanceof SearchResult) {

    SearchResult si = (SearchResult) obj;

    System.out.println("/tname: " + si.getName());

    Attributes attrs = si.getAttributes();

    if (attrs == null) {

    System.out.println("/tNo 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("/t/t" + 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();

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    public static void main(String[] args) {

    conn();

    addInformation();

    deleteInformation();

    modifyInformation("uid=jdoe,ou=people,dc=my-domain,dc=com");

    search();

    try {

    dc.close();

    } catch (NamingException e) {

    e.printStackTrace();

    }

    }

    }


    最新回复(0)