今天终于把添加,删除,修改节点名,属性,遍历节点都弄出来了,先把代码贴出来吧
/**
*
* @author
*/
import java.util.Hashtable;
import javax.naming.directory.*;
import java.util.*;
import javax.naming.*;
public class ChenYi {
DirContext dc = null;
String account = "Manager";//操作LDAP的帐户。默认就是Manager。
String password = "secret";//帐户Manager的密码。
String root = "dc=example,dc=com"; //LDAP的根节点的DC
public ChenYi() {
init();
//add();//添加节点
//delete("ou=hi,dc=example,dc=com");//删除"ou=hi,dc=example,dc=com"节点
//modifyInformation("ou=hi,dc=example,dc=com");//修改"ou=hi,dc=example,dc=com"属性
//renameEntry("ou=new,o=neworganization,dc=example,dc=com","ou=neworganizationalUnit,o=neworganization,dc=example,dc=com");//重命名节点"ou=new,o=neworganization,dc=example,dc=com"
searchInformation("dc=example,dc=com", "", "(objectclass=*)");//遍历所有根节点
//searchInformation("o=neworganization,dc=example,dc=com","","(objectclass=*)");//遍历指定节点的分节点
close();
}
public void init() {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://192.168.100.221:389/");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=" + account + "," + root);
env.put(Context.SECURITY_CREDENTIALS, password);
try {
dc = new InitialDirContext(env);//初始化上下文
System.out.println("认证成功");//这里可以改成异常抛出。
} catch (javax.naming.AuthenticationException e) {
System.out.println("认证失败");
} catch (Exception e) {
System.out.println("认证出错:" + e);
}
}
public void close() {
if (dc != null) {
try {
dc.close();
} catch (NamingException e) {
System.out.println("NamingException in close():" + e);
}
}
}
public void add() {
try {
String newUserName = "hi";
BasicAttributes attrs = new BasicAttributes();
BasicAttribute objclassSet = new BasicAttribute("objectClass");
objclassSet.add("top");
objclassSet.add("organizationalUnit");
attrs.put(objclassSet);
attrs.put("ou", newUserName);
dc.createSubcontext("ou=" + newUserName + "," + root, attrs);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Exception in add():" + e);
}
}
public void delete(String dn) {
try {
dc.destroySubcontext(dn);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Exception in delete():" + e);
}
}
public boolean modifyInformation(String dn) {
try {
ModificationItem[] mods = new ModificationItem[1];
/*添加属性*/
// Attribute attr0 = new BasicAttribute("description",
// "测试");
// mods[0] = new ModificationItem(DirContext.ADD_ATTRIBUTE,attr0);
/*修改属性*/
// Attribute attr0 = new BasicAttribute("description", "陈轶");
// mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
// attr0);
/*删除属性*/
Attribute attr0 = new BasicAttribute("description",
"陈轶");
mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE,
attr0);
dc.modifyAttributes(dn, mods);
return true;
} catch (NamingException ne) {
ne.printStackTrace();
System.err.println("Error: " + ne.getMessage());
return false;
}
}
/**
* @param base :根节点(在这里是"dc=example,dc=com")
* @param scope :搜索范围,分为"base"(本节点),"one"(单层),""(遍历)
* @param filter :指定子节点(格式为"(objectclass=*)",*是指全部,你也可以指定某一特定类型的树节点)
*/
public void searchInformation(String base, String scope, String filter) {
SearchControls sc = new SearchControls();
if (scope.equals("base")) {
sc.setSearchScope(SearchControls.OBJECT_SCOPE);
} else if (scope.equals("one")) {
sc.setSearchScope(SearchControls.ONELEVEL_SCOPE);
} else {
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
}
NamingEnumeration ne = null;
try {
ne = dc.search(base, filter, sc);
// Use the NamingEnumeration object to cycle through
// the result set.
while (ne.hasMore()) {
System.out.println();
SearchResult sr = (SearchResult) ne.next();
String name = sr.getName();
if (base != null && !base.equals("")) {
System.out.println("entry: " + name + "," + base);
} else {
System.out.println("entry: " + name);
}
Attributes at = sr.getAttributes();
NamingEnumeration ane = at.getAll();
while (ane.hasMore()) {
Attribute attr = (Attribute) ane.next();
String attrType = attr.getID();
NamingEnumeration values = attr.getAll();
Vector vals = new Vector();
// Another NamingEnumeration object, this time
// to iterate through attribute values.
while (values.hasMore()) {
Object oneVal = values.nextElement();
if (oneVal instanceof String) {
System.out.println(attrType + ": " + (String) oneVal);
} else {
System.out.println(attrType + ": " + new String((byte[]) oneVal));
}
}
}
}
} catch (Exception nex) {
System.err.println("Error: " + nex.getMessage());
nex.printStackTrace();
}
}
public boolean renameEntry(String oldDN, String newDN) {
try {
dc.rename(oldDN, newDN);
return true;
} catch (NamingException ne) {
System.err.println("Error: " + ne.getMessage());
return false;
}
}
public static void main(String[] args) {
new ChenYi();
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhangjunfangkaixin/archive/2009/03/04/3957198.aspx
分享到:
相关推荐
Java作为一个强大的编程语言,提供了多种方式与OpenLDAP进行交互,实现对用户数据的操作,如增加、删除、修改和查询。本文将深入探讨如何使用Java进行OpenLDAP操作,并结合LdapOperationDemo这个示例程序来阐述具体...
3. **配置环境变量**: 将`bin`目录添加到系统PATH环境变量中,以便在命令行中直接运行OpenLDAP命令。 4. **创建数据库**: 使用`slaptest`工具生成默认的配置文件,并创建一个数据库,如`bdb`或`hdb`类型。 **配置...
在这个场景中,我们将深入探讨如何通过Java编程语言创建一个基于OpenLDAP的操作工具类,实现对目录服务的增删改查功能。 首先,理解OpenLDAP的基本概念是至关重要的。OpenLDAP是一个开源的LDAP服务器,它提供了...
3. **执行操作**: 使用`InitialDirContext`对象执行查询、添加、删除和修改等操作。 4. **搜索操作**: 使用`SearchControls`和`NamingEnumeration`来执行 LDAP 查询,获取匹配的条目。 5. **连接管理**: 关闭连接以...
1. **添加用户和组**: 使用OpenLDAP的管理工具,如`ldapadd`或图形化的管理界面,可以方便地添加、删除和修改用户和组信息。 2. **权限控制**: OpenLDAP支持细粒度的权限控制。通过修改`access control ...
2. 编写Java代码以连接、搜索、添加、删除或修改LDAP条目: ```java import javax.naming.*; import javax.naming.ldap.*; public class LDAPExample { public static void main(String[] args) { String ldap...
在 Java 中,开发者可以使用 JNDI 的 LDAP 实现来连接 LDAP 服务器,并执行各种操作。JNDI 提供了一个统一的接口来访问不同的目录服务,包括 LDAP、DNS、NIS 等。通过 JNDI,开发者可以使用 Java 语言来访问和操作 ...
这个库不仅提供了基本的连接、搜索、添加、删除和修改操作,还支持更高级的功能,如SSL/TLS安全连接和属性的修改。 SSL(Secure Socket Layer)和它的继任者TLS(Transport Layer Security)是网络安全传输的重要...
- **查找和操作条目**:通过NamingEnumeration接口遍历目录中的条目,可以搜索、添加、删除或修改数据。JNDI提供了一些基本操作,如lookup()用于查找条目,bind()和rebind()用于添加或更新条目,unbind()用于删除...
6. **删除操作**:`DirContext.unbind()`用于从目录中删除条目。 **示例代码**: ```java import javax.naming.*; import javax.naming.directory.*; public class LDAPExample { public static void main...
go-ldap提供了对LDAP协议的全面支持,包括连接、搜索、修改、添加、删除等操作。在go-ldap-admin项目中,这个库起到了关键作用,使得后端能够方便地管理OpenLDAP的数据。 ### 文件结构分析 go-ldap-admin-main这个...
4. **修改条目**:如果需要更新目录中的信息,可以使用`DirContext.modifyAttributes()`方法,传入DN和修改的操作(如添加、删除或替换属性)。 5. **创建和删除条目**:使用`DirContext.createSubcontext()`创建新...
- **与LDAP结合**:JNDI可以用来连接OpenLDAP服务器,通过 LDAP Provider 实现对目录服务的查询、添加、修改和删除操作。 3. **测试OpenLDAP + JNDI**: - **环境准备**:首先需要在服务器上安装并配置好OpenLDAP...
接着找到Path变量,添加%JAVA_HOME%\bin到其值中,使得系统可以在任何目录下运行Java命令。 完成以上步骤后,你就成功在Windows环境中安装了OpenLDAP并配置了基础的目录结构,同时也安装了JDK以支持相关操作。接...
它提供了一种标准的方式来查询、添加、修改和删除目录中的条目。在本文中,我们将探讨如何搭建一个LDAP服务器,并使用Java进行连接。 ### LDAP服务器搭建 1. **选择LDAP服务器软件** - OpenLDAP:开源且广泛使用...
开发者可能在这个文件中定义了连接 LDAP 服务器、搜索、添加、删除和修改条目的方法。这些方法可能会使用`InitialDirContext`对象来建立连接,并通过`NamingEnumeration`遍历查询结果。通过分析这个文件,我们可以...
JNDI允许开发者通过Java代码进行查找、绑定、修改和删除LDAP目录中的条目。 2. **Apache LDAP API**:这是一个开源的Java LDAP客户端实现,提供了更高级别的接口和功能,使得与LDAP服务器的交互更为便捷。它包括...
3. **执行操作**:一旦连接建立,就可以通过`DirContext`接口的方法进行各种操作,如查找、添加、修改和删除目录条目。 4. **关闭资源**:操作完成后,记得关闭打开的连接,以避免资源泄露。 标签“源码”可能暗示...
开发人员可以使用各种编程语言(如C#、Java、Python)和库(如UnboundID LDAP SDK、OpenLDAP SDK)来与LDAP服务器交互。编程时,需要处理的主要任务包括连接服务器、执行查询、处理结果集、执行增删改查操作等。 5...