l
新建条目 使用到了context里面的createSubcontext方法。
/**
* creates an ou with a specified name in a specified path
* @param newOUName The name of the new ou.
* @param dest_path The destinational path to create an ou.
* @param ctx The ldapcontext.
*/
public static void createOU(String newOUName,String dest_path,LdapContext ctx){
Attributes attrs = new BasicAttributes();
attrs.put("name",newOUName);
BasicAttribute objectclassSet = new BasicAttribute("objectclass");
objectclassSet.add("top");
objectclassSet.add("organizationalUnit");
attrs.put(objectclassSet);
try{
ctx.createSubcontext("ou="+newOUName+","+dest_path,attrs);
System.out.println("Add an ou "+newOUName+" successful.");
}catch(Exception e){
System.out.println(e.toString());
}
}
上面代码创建了ou的一个上下文,并包含具有两个值得属性objectClass,值分别为top何organizationalUnit。
l
删除条目 删除条目使用到了context的destroySubcontext(String DN)方法,这方法只需传递一个DN参数就可以实现删除条目。 首先介绍删除一个叶子节点的例子: public static void deleteContext(String DN,LdapContext ctx){
try{
ctx.destroySubcontext(DN);
System.out.println("Delete context successful.");
}catch(Exception e){
System.out.println(e.toString());
}
} 怎样?够简单吧。但是如果我要删除一个非叶子节点呢? 再次调用上面的方法,这个传递另外一个非叶子节点的DN上去,结果会抛出异常。 究其原因是以为这种操作是不安全的。那我就上网找其它,看有没有一下子就可以删除的方法,结果没有。那我们就自己写一个吧,以下是删除非叶子节点的方法:
/**
* deletes the specified extension information
* @param search_mode The search mode.
* @param search_filter The search filter.
* @param search_base The search base path.
* @param ctx the ldapcontext.
*/
public static void deleteStation(int search_mode,String search_base,String search_filter,LdapContext ctx){
try{
SearchControls constraints = new SearchControls();
//set the search mode,including subtree,onelevel,object
constraints.setSearchScope(search_mode);
//set vector to store all the distinguishedName
Vector dn = new Vector();
//get the NamingEnumeration from ldapcontext
NamingEnumeration ne = ctx.search(search_base,search_filter,constraints);
//add the distinguishedName into vector
while(ne.hasMore()){
SearchResult sr = (SearchResult)ne.nextElement();
Attributes attrs = sr.getAttributes();
dn.add(attrs.get("distinguishedName").get());
}
//delete the entries from leaf to parent node
for(int i=dn.size()-1;i>=0;i--){
ctx.destroySubcontext((String)dn.get(i));
}
System.out.println("Delete context successful.");
}catch(Exception e){
System.out.println(e.toString());
}
}
我们使用一个Vector通过使用SUB_TREE的遍历方式保存所有要删除的DN,之后从叶子节点开始删除就OK咯!
|