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();
}
}
}
相关推荐
Java作为一个强大的编程语言,提供了多种方式与OpenLDAP进行交互,实现对用户数据的操作,如增加、删除、修改和查询。本文将深入探讨如何使用Java进行OpenLDAP操作,并结合LdapOperationDemo这个示例程序来阐述具体...
java代码操作linux上的openldap目录服务器,进行增删改查操作
Java 语言通过 JNDI(Java Naming and Directory Interface)提供了对 LDAP(Lightweight Directory Access Protocol)的支持,允许开发者通过 Java 语言来操作 LDAP 服务器。LDAP 是一种常用的目录服务协议,用于...
openldap浏览器的Java代码实现
在这个场景中,我们将深入探讨如何通过Java编程语言创建一个基于OpenLDAP的操作工具类,实现对目录服务的增删改查功能。 首先,理解OpenLDAP的基本概念是至关重要的。OpenLDAP是一个开源的LDAP服务器,它提供了...
OpenLDAP 是一个开源的轻量级目录访问协议(Lightweight Directory Access Protocol)实现,它提供了对目录服务的强大支持。在IT行业中,OpenLDAP 被广泛用于存储和管理组织结构数据,例如用户账户、联系人信息、组...
windows下openldap的安装与java操作测试 windows下openldap的安装与java操作测试
### OpenLDAP for Linux操作文档:理解与应用 #### 了解LDAP协议 LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)是一种基于X.500标准的目录访问协议,用于在网络环境下提供目录服务。它最初...
标题中提到的"windows版的openldap"意味着我们将在Windows操作系统上安装和运行OpenLDAP。这与在Linux等Unix-like系统上的安装过程有所不同,因为Windows版本可能需要特殊的配置步骤和依赖项管理。 描述中提到...
3. **执行查询和操作**: 使用`search()`方法进行目录查询,`bind()`和`unbind()`方法进行条目的添加和删除,`modify()`方法进行条目的更新。 4. **处理结果**: 查询结果以NamingEnumeration的形式返回,可以通过迭代...
在C#编程中,与OpenLDAP进行交互通常需要使用特定的API或库,而"可以供参考的用于对openldap操作的一系列函数,提供了接口函数.rar"这个压缩包可能包含了一些帮助开发者实现这一目标的函数和头文件。 首先,`slapd....
`OpenLDAP.cs`可能是实现OpenLDAP操作的C#类库,包含连接LDAP服务器、执行搜索、添加、删除和修改记录等功能。 3. **操作示例代码**:`ADConfigSchema.Designer.cs`可能包含了活动目录配置的元数据,`...
3. **执行操作**: 使用`InitialDirContext`对象执行查询、添加、删除和修改等操作。 4. **搜索操作**: 使用`SearchControls`和`NamingEnumeration`来执行 LDAP 查询,获取匹配的条目。 5. **连接管理**: 关闭连接以...
安装 OpenLDAP 服务器需要使用 BerkeleyDB,首先,需要下载 OpenLDAP 的源代码,解压缩后,进入 OpenLDAP 目录,执行 configure、make 和 make install 命令。configure 命令需要指定 BerkeleyDB 的 include 和 lib ...
10. **工具和命令行**:OpenLDAP提供了一系列实用工具,如`ldapadd`、`ldapdelete`、`ldapsearch`等,用于管理目录和执行操作。 在下载并安装OpenLDAP 2.4.42后,通常会有一个包含头文件、库文件和可执行程序的文件...
总的来说,理解如何在Java中使用jLDAP库与LDAP服务器进行SSL连接,并执行各种操作,对于开发涉及目录服务的软件至关重要。这包括了熟悉LDAP的基本概念,如DN(Distinguished Name)、过滤器以及属性操作,以及在Java...
《OpenLDAP 2.6 管理指南》是一份为熟悉基于LDAP的目录服务的有经验系统管理员准备的操作手册。这份文档旨在帮助用户在UNIX及其类似系统上安装OpenLDAP软件2.6版本。OpenLDAP是一款开源的轻量级目录访问协议...
OpenLDAP 广泛应用于各大软件公司的产品中,如 Microsoft 的 Active Directory、iPlanet 的 iPlanet Directory Server(现已更名为:Sun Java System Directory Server)、Lotus 的 Domino Directory、IBM 的 ...
OpenLDAP 2.4系列是其一个重要且广泛应用的版本,提供了多种功能和改进,以适应不同的操作系统环境。然而,正如描述中所指出的,不同版本的OpenLDAP可能与特定的Linux发行版存在兼容性问题。下面将详细探讨OpenLDAP ...