壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11847|回复: 2

使用JNDI操作LDAP(5)(转载)

[复制链接]
发表于 2010/6/29 11:09:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
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,值分别为toporganizationalUnit


l
删除条目
删除条目使用到了contextdestroySubcontextString 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!

 楼主| 发表于 2010/6/29 11:10:03 | 显示全部楼层
更多交流,咨询,合作请登录www.aukcell.com
遨豪(大连)科技有限公司
发表于 2010/8/17 15:57:36 | 显示全部楼层
Liferay门户是世界领先的开源企业门户解决方案,采用最新的Java,J2EE和Web 2.0技术。

运行在任何Java EE应用服务器,servlet容器,数据库和操作系统
现成的组件可用性---60多个portlet可供选择
内建有内容管理系统和协作套件
现成的开发工具盒
基于AJAX用户界面的获奖支持
本地化为22种语言,现成的组件
完全LDAP同步
使用logicLibray的logiscan门户平台套件的最安全门户平台
商用友好的MIT授权协

中国大连Liferay服务

QQ:1417153858 (Liferay支持)
QQ:1410151582 (Liferay培训)
QQ:1492270185 (Liferay企业版)

联系电话:
0411-8489 8263 (总机)
86-15601156692 (咨询)

Liferay中国服务大连QQ群: 49845872

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 00:12 , Processed in 0.013319 second(s), 15 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表