日期:2014-05-18  浏览次数:20695 次

JAVA操作LDAP目录服务
最近项目有用到LDAP目录服务,第一次接触这个东西,还请大神们帮帮忙.

这张图是我用Softerra LDAP Browser工具剪切下来的目录图片.我现在想要的效果是:在这多个ou列中新加一个ou=indicate目录,然后再想里面加相关数据,并且这些数据是以一对多的关系存在.

自己写了一段代码,请查看
/**
 * Ldap连接
 * 
 * @throws Exception
 */
private static InitialLdapContext LdapConnect() throws Exception {
try {
String url ="ldap://localhost:389";
String name ="cn=root";
String pwd = "root";
System.out.println(url+" "+name+" "+pwd);
Hashtable hashtable = new Hashtable();
hashtable.put(Context.AUTHORITATIVE, "true");
hashtable.put("com.sun.jndi.ldap.connect.pool", "true");
hashtable.put("java.naming.ldap.version", "3");
hashtable.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
hashtable.put(Context.REFERRAL, "follow");
hashtable.put(Context.PROVIDER_URL, url);
hashtable.put(Context.SECURITY_AUTHENTICATION, "Simple");
hashtable.put(Context.SECURITY_PRINCIPAL, name);
hashtable.put(Context.SECURITY_CREDENTIALS, pwd);

ctx = new InitialLdapContext(hashtable, null);
System.out.println("Get LdapConnect:ctx=" + ctx);
} catch (Exception e) {
System.out.println("LdapConnect Sys Error:" + e.getMessage());
throw new Exception(e.getMessage());
}
return ctx;
}


得到链接之后,就开始进行新增方法
/**
 *  新增
 * @param phone 固话
 * @param indicate 标示号
 */

public static void getAdd(String phone,String indicate){

try {
Attributes attrs = new BasicAttributes();

Attribute objectClassAttr = new BasicAttribute("objectclass");
objectClassAttr.add("top");
objectClassAttr.add("person");
objectClassAttr.add("ePerson");
objectClassAttr.add("SHTELIndicate");
attrs.put(objectClassAttr);

attrs.put("phone", phone);
attrs.put("cn", phone);
attrs.put("sn", phone);
attrs.put("indicate", indicate);

LdapConnect().createSubcontext("cn=" + phone+ ",ou=indicate,dc=account,dc=mboss,dc=com", attrs);
            System.out.println("cg");


} catch (Exception e) {
e.printStackTrace();


}


进行测试