import java.util.Properties;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
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 testClient {
public void testSearch(){
String dn="cn=Manager,dc=xxx,dc=com";
String searchDn1="ou=users,dc=xxx,dc=com";
String searchDnFilter="(|(cn=samwong)(telephoneNumber=12345678))";
Properties hs = new Properties();
hs.setProperty(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
hs.setProperty(Context.PROVIDER_URL,"ldap://192.168.1.177:389");
hs.setProperty(Context.SECURITY_AUTHENTICATION,"simple");
hs.setProperty(Context.SECURITY_PRINCIPAL,dn);
hs.setProperty(Context.SECURITY_CREDENTIALS,"password");
try {
/*指定了JNDI服务提供者中工厂类(factory class)的名称。Factory负
责为其服务创建适当的InitialContext对象。在上面的代码片断中,为文件
系统服务提供者指定了工厂类*/
DirContext ctx = new InitialDirContext(hs);
System.out.println("成功创建初始化context对象!");
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration en = ctx.search(searchDn1,searchDnFilter, constraints);
while (en != null && en.hasMoreElements()) {
Object obj = en.nextElement();
if (obj instanceof SearchResult) {
SearchResult si = (SearchResult) obj;
System.out.println("name: " + si.getName());
Attributes attrs = si.getAttributes();
if (attrs == null) {
System.out.println("No attributes");
} else {
Attribute attr = attrs.get("userPassword");
if(attr!=null){
Object o = attr.get();
byte[] s = (byte[]) o;
String pwd2 = new String(s);
System.out.println(pwd2);
}
}
} else {
System.out.println(obj);
}
System.out.println();
}
//ctx.lookup(name);
//Person obj=(Person) ctx.lookup(searchDn);
//System.out.print("personname:"+obj.getName()+"psersonage:"+obj.getAge());
ctx.close();
}catch(Exception ex ){
ex.printStackTrace();
System.exit(1);
}
/*
String dn="cn=Manager,dc=xxx,dc=com";
String searchDn="cn=SamWong,ou=users,dc=xxx,dc=com";
Properties hs = new Properties();
hs.setProperty(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
hs.setProperty(Context.PROVIDER_URL,"ldap://192.168.1.177:389");
hs.setProperty(Context.SECURITY_AUTHENTICATION,"simple");
hs.setProperty(Context.SECURITY_PRINCIPAL,dn);
hs.setProperty(Context.SECURITY_CREDENTIALS,"password");
try {
指定了JNDI服务提供者中工厂类(factory class)的名称。Factory负
责为其服务创建适当的InitialContext对象。在上面的代码片断中,为文件
系统服务提供者指定了工厂类
DirContext ctx = new InitialDirContext(hs);
System.out.println("成功创建初始化context对象!");
//ctx.lookup(name);
Object obj=ctx.lookup(searchDn);
ctx.get(searchDn)
ctx.close();
}catch(Exception ex ){
ex.printStackTrace();
System.exit(1);
}*/
}
/**
* @param args
*/
public static void main(String[] args) {
testClient client=new testClient();
client.testSearch();
}
}
分享到:
相关推荐
JNDI是一个接口,提供了一种统一的方式来查找和管理各种命名和目录服务,包括 LDAP、DNS、NIS 等。它允许开发者通过标准的Java API来查询和操作这些服务,而无需了解底层服务的具体实现。 2. **LDAP简介** LDAP是...
JNDI是一个接口,提供了一种标准的方式来访问命名和目录服务,而LDAP则是一种网络协议,常用于存储和查询用户账户、组信息、配置数据等结构化信息。 JNDI的主要作用是将Java应用程序与各种不同的命名和目录服务连接...
LDAP目录服务具有快速查询、分布式结构和开放标准的特点,使得它在企业环境中广泛应用于身份验证、权限管理等领域。 在描述中提到的链接,虽然没有提供具体内容,但通常这类博客会详细介绍如何使用JNDI来连接和操作...
提供了使用fsContext服务器的unbind bind list lookup rename的相关例子,及ldap 连接的一个例子 jndi,就是命名服务(n:naming)和目录服务(d:directory). 命名服务:把对象映射到方便记忆的名字的机制.可以通过域名系统...
基于Java JNDI 操纵LDAP的基础实现,包括LDAP连接相关生命周期,认证的两种策略demo,条目的操作,schema的基础操作包括(attributeDefinition\objectDefinition\)但未包含相关syntaxDefinition的操纵. 没有资源分的朋友...
### JNDI与LDAP基础概念 JNDI(Java Naming and Directory Interface)是Java平台的一部分,提供了一个标准API,用于访问命名和目录系统。它允许应用程序通过一个统一的接口进行对不同命名和目录服务的查找和访问...
import com.sun.jndi.ldap.ctl.VirtualListViewControl;
在 `getDirContext` 方法中,使用 Properties 对象设置 JNDI 的环境属性,如认证方式、连接池配置、初始上下文工厂、提供者URL、连接超时、安全认证方式以及 SSL 配置。这些设置使得 LDAP 连接能够根据指定的参数...
**Spring LDAP与JNDI:增删改查详解** 在Java开发中,当我们需要与目录服务进行交互,例如用户认证、权限管理等,Spring LDAP和Java Naming and Directory Interface (JNDI)是两个常用的技术。本文将通过一个入门级...
JNDI支持LDAP、RMI(Remote Method Invocation)、DNS等多种命名和目录服务,这为Java开发者提供了一种灵活的方式来管理和检索应用所需的数据。 #### 安装与配置OpenLDAP - **环境**: Windows XP - **安装包获取**...
综上所述,"用sql语句的方式操作ldap"涉及到理解 LDAP 的特性和结构,以及如何使用JNDI API在Java应用程序中执行这些操作。通过这样的方式,开发者可以利用熟悉的SQL概念来管理LDAP目录,从而简化开发流程。
要查询 LDAP 服务器,可以使用 `DirContext` 对象的 `search()` 方法: ```java NamingEnumeration results = ctx.search("ou=people,o=tcl,c=cn", "(objectClass=inetOrgPerson)", new SearchControls()); ``` ...
在Java中,我们可以使用JNDI来实现LDAP查询。我们可以使用JNDI的 DirContext 接口来检索用户或组记录。 实例代码 以下是使用Java实现LDAP增、删、改、查操作的实例代码: ```java import javax.naming.Context; ...
亲测可以使用的,LDAP认证用户名密码,使用JNDI方式认证
**JNDI**(Java Naming and Directory Interface)是Java平台上的标准目录服务API,它允许Java应用程序以统一的方式访问多种命名和目录服务。 #### Java代码示例 以下是一个简单的Java程序示例,展示如何使用JNDI...
【JNDI与LDAP简介】 Java Naming and Directory Interface (JNDI) 是Java平台中用于访问命名和目录...通过这种方式,开发人员无需直接处理JNDI和LDAP的复杂性,而是专注于业务逻辑,提高了代码的可读性和可维护性。
JNDI提供了与LDAP集成的能力,使得Java程序能够轻松地访问和管理LDAP服务器上的数据。 #### 三、示例代码解析 在给定的部分内容中,我们看到的是一个典型的JNDI操作示例。首先,定义了环境变量`env`,并初始化了...