`

JNDI_LDAP实战十四

 
阅读更多

首先准备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());

 

}

 

 

}

 

 

 

 

 注:如果例子不能完整运行,留言或参照本博客其他文章

分享到:
评论

相关推荐

    JNDI.rar_JINI jndi_JNDI相关书籍_jndi

    4. **实战示例**:提供实际的代码示例,展示如何在应用程序中集成JNDI,以及如何处理各种服务的查找和管理。 **在学习JNDI时,你可能会遇到的几个关键知识点:** 1. **Naming Contexts**:命名上下文是JNDI的核心,...

    ldap Java实战

    通过以上介绍,我们了解了使用Java进行LDAP实战的基本步骤和关键点。然而,实际开发中还需要结合具体的业务需求和LDAP服务器的配置进行相应的调整。提供的图片文件可能包含示例场景、代码片段或其他有助于理解的视觉...

    LDAP学习资料

    - Spring LDAP支持JNDI(Java Naming and Directory Interface),提供了一种声明式的方式来配置和管理目录连接。 4. **使用Spring LDAP进行LDAP操作** - `LdapTemplate`是主要的编程接口,提供了添加、删除、...

    Practical Spring LDAP英文原版

    Spring LDAP是Spring框架的一个扩展,旨在简化Java与 Lightweight Directory Access Protocol (LDAP) 的交互,解决传统JNDI(Java Naming and Directory Interface)方式所带来的复杂性和模块性问题。 LDAP是一种...

    jndi使用实例

    《JNDI实战解析》 Java Naming and Directory Interface (JNDI) 是Java平台中一个重要的服务接口,它提供了一种标准的方法来查找和访问各种命名和目录服务。本文将深入探讨JNDI的使用实例,帮助开发者更好地理解和...

    jndi示例(java)

    8. **实战应用**:在实际开发中,JNDI的例子可能包括通过JNDI查找并连接到数据库的数据源,或者在分布式环境中查找和调用远程服务。 总结来说,"jndi示例(java)"的学习涵盖了JNDI的基本概念、核心操作,以及在...

    Understanding And Deploying Ldap Directory Services

    - LDAP API使用:介绍编程接口,如Java的JNDI和Python的ldap3库,用于开发与LDAP交互的应用程序。 9. **案例研究与最佳实践**: - 实战经验:分享实际部署中的挑战和解决方案,提供成功案例。 - 最佳实践:总结...

    log4j2_rce 项目

    例如,使用${jndi:ldap://attacker-server.com/Exploit}这样的构造,可以引导Log4j2向攻击者的服务器发起请求,进而执行攻击者提供的代码。 描述中提到的“可以用idea编译,用网上工具复现一遍”表明此项目提供了一...

    服务器端接口编程.pptx

    JNDI允许应用程序通过统一的方式与不同的命名或目录服务进行交互,如DNS、LDAP等。配置JNDI数据源主要包括两个步骤:一是配置数据源,根据作用域的不同,可以配置为仅供单个应用使用,或者全局共享;二是通过JNDI...

    J2EE开发全程实录(word版)

    5. **JNDI(Java Naming and Directory Interface)**:JNDI提供了一种统一的方式来查找和访问各种命名和目录服务,如DNS、LDAP等。在J2EE应用中,JNDI常用于查找资源,如数据库连接池、邮件服务器配置等。 6. **...

    J2EE_Training_data_set.rar_J2EE_training data

    7. **Java Naming and Directory Interface (JNDI)**:提供了一个统一的接口来访问命名和目录服务,如LDAP。 **J2EE Training Data Set内容概览** "J2EE入门资料集.chm"文件很可能包含了以下内容: 1. **基础概念...

    Java.J2EE.Job.Interview.Companion.2nd.Edition.Apr.2007.pdf

    - **JNDI/LDAP**:讨论命名和服务发现接口以及轻量目录访问协议。 - **RMI**:研究远程方法调用的基础和实现细节。 - **EJB**:介绍企业级Java Beans的作用域、生命周期和部署模型。 - **JMS**:分析Java消息...

    Java/J2EE Job Interview Companion

    JNDI/LDAP** - **查找服务**:学习如何使用JNDI查找并定位命名服务。 - **LDAP集成**:了解如何将Java应用程序与LDAP服务器集成,实现用户认证和权限管理。 **6. RMI** - **远程调用**:掌握如何使用RMI实现...

Global site tag (gtag.js) - Google Analytics