java对openldap执行crud操作
博客专区 > chaun 的博客 > 博客详情
java对openldap执行crud操作
chaun 发表于3年前
java对openldap执行crud操作
  • 发表于 3年前
  • 阅读 16
  • 收藏 0
  • 点赞 0
  • 评论 0
摘要: java对openldap执行crud操作
import javax.naming.NamingException;

public interface Ldap {
 public void connect() throws NamingException;
 public void search() throws NamingException;
 public void update() throws NamingException;
 public void add() throws NamingException;
 public void delete() throws NamingException;
 public void close() throws NamingException;
}
 
import java.util.Hashtable;
import javax.naming.Context;
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 LdapImpl implements Ldap {
 private DirContext ds;
 @Override
 public void search() throws NamingException {
  System.out.println("Searching...");
  SearchControls searchCtls = new SearchControls();
  // Specify the search scope
  searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
  // specify the LDAP search filter
  String searchFilter = "uid=test";
  // Specify the Base for the search
  //String searchBase = "dc=ibm,dc=com";
  String searchBase = "o=tcl,c=cn";
  
  // Specify the attributes to return
  String returnedAtts[] = { "cn"};
  //可以查找多个属性
  //String returnedAtts[] = { "cn","mail","userPassword","sn" };
  
  searchCtls.setReturningAttributes(returnedAtts);
  // Search for objects using the filter
  NamingEnumeration<SearchResult> entries = ds.search(searchBase,
    searchFilter, searchCtls);
  // Loop through the search results
  while (entries.hasMoreElements()) {
   SearchResult entry = entries.next();
   System.out.println(">>>" + entry.getName());
   // Print out the groups
   Attributes attrs = entry.getAttributes();
   if (attrs != null) {
    for (NamingEnumeration<? extends Attribute> names = attrs
      .getAll(); names.hasMore();) {
     Attribute attr = names.next();
     System.out.println("AttributeID: " + attr.getID());
     for (NamingEnumeration<?> e = attr.getAll(); e.hasMore();) {
      System.out.println("Attributes:" + e.next());
     }
    }
   }
  }
  System.out.println("Search complete.");
 }
 @Override
 public void update() throws NamingException {
  System.out.println("Updating...");
   ModificationItem[] mods = new ModificationItem[1];
         Attribute attr = new BasicAttribute("cn", "changed value");
         
         // Support add, replace and remove an attribute.
         mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attr);
//         ds.modifyAttributes("uid=test,ou=tester,dc=ibm,dc=com", mods);
         ds.modifyAttributes("uid=test, o=tcl,c=cn", mods);
         
         System.out.println("Updated.");
 }
 @Override
 public void add() throws NamingException {
  System.out.println("Adding...");
  Attributes attrs = new BasicAttributes();
  attrs.put("uid", "test");
  attrs.put("sn", "test");
  attrs.put("cn", "test test");
  attrs.put("userPassword", "111111".getBytes());
  attrs.put("mail", "test@126.com");
  attrs.put("labeledURI", "http://unmi.blogcn.com");
  
  // the following attribute has two values
  Attribute objclass = new BasicAttribute("objectClass");
  objclass.add("inetOrgPerson");
  attrs.put(objclass);
  //this.ds.createSubcontext("uid=test,ou=tester,dc=ibm,dc=com", attrs);
  this.ds.createSubcontext("uid=test, o=tcl,c=cn", attrs);
  System.out.println("Add complete.");
 }
 @Override
 public void delete() throws NamingException {
  System.out.println("Deleting...");
  //this.ds.destroySubcontext("uid=test,ou=tester,dc=ibm,dc=com");
  this.ds.destroySubcontext("uid=test,o=tcl,c=cn");
  System.out.println("Deleted.");
 }
 @Override
 public synchronized void connect() throws NamingException {
  System.out.println("connecting...");
  if (ds == null) {
   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://localhost:389");
   env.put(Context.SECURITY_AUTHENTICATION, "simple");
   //env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=ibm,dc=com");
   env.put(Context.SECURITY_PRINCIPAL,  "cn=Manager,o=tcl,c=cn" ); 
   
   env.put(Context.SECURITY_CREDENTIALS, "secret");
   ds = new InitialDirContext(env);
   // ds = (DirContext) initial.lookup("ldap://localhost:389");
  }
  System.out.println("connected.");
 }
 @Override
 public void close() throws NamingException {
  System.out.println("closing...");
  ds.close();
  System.out.println("closed.");
 }
}
 
public class Factory {
 private static Ldap instance;
 public synchronized static Ldap createInstance() {
  if (instance == null) {
   try {
    instance = (Ldap) Class.forName("com.leech.ldap.LdapImpl").newInstance();
   } catch (Exception e) {
    throw new RuntimeException(e);
   } 
  }
  return instance;
 }
}
 
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
public class LDAPTest {
 /**
  * @param args
  */
 public static void main(String[] args) {
  try {
   test2();
  } catch (NamingException e) {
   e.printStackTrace();
  }
 }
 
 public static void test1(){
  LDAPTest LDAPTest1 =  new  LDAPTest();   
     String root =  "o=tcl,c=cn" ;  //root   
     Hashtable env =  new  Hashtable();   
     env.put(Context.INITIAL_CONTEXT_FACTORY,  "com.sun.jndi.ldap.LdapCtxFactory" );   
     env.put(Context.PROVIDER_URL,  "ldap://localhost/"  + root);       
     env.put(Context.SECURITY_AUTHENTICATION,  "simple" );   
     env.put(Context.SECURITY_PRINCIPAL,  "cn=Manager,o=tcl,c=cn" );   
     env.put(Context.SECURITY_CREDENTIALS,  "secret" );   
     DirContext ctx =  null ;   
      try  {   
       ctx =  new  InitialDirContext(env);   
       System.out.println( "认证成功" );   
     }   
      catch  (javax.naming.AuthenticationException e) {   
       e.printStackTrace();   
       System.out.println( "认证失败" );   
     }   
      catch  (Exception e) {   
       System.out.println( "认证出错:" );   
       e.printStackTrace();   
     }  
      if  (ctx !=  null ) {   
        try  {   
         ctx.close();   
       }   
        catch  (NamingException e) {   
          //ignore   
       }   
     }  
 }
 
 public static void test2()throws NamingException  {
  Ldap ldap = Factory.createInstance();
  
  ldap.connect();
  try {
   // add uid=test,ou=tester,dc=ibm,dc=com
   ldap.add();
   
   // search uid=test
      //ldap.search();
      
      // 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();
  }
 }
}


共有 人打赏支持
粉丝 80
博文 260
码字总数 95733
×
chaun
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: