首先准备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 操作 LDAP的几个例子源码 包括连接、添加、删除、修改、搜寻
Windows_7_下搭建LDAP服务器并使用JNDI Windows_7_下搭建LDAP服务器并使用JNDI Windows_7_下搭建LDAP服务器并使用JNDI
在JAVA编程中对JNDI的支持.是一个开放的源码.
基于Java JNDI 操纵LDAP的基础实现,包括LDAP连接相关生命周期,认证的两种策略demo,条目的操作,schema的基础操作包括(attributeDefinition\objectDefinition\)但未包含相关syntaxDefinition的操纵. 没有资源分的朋友...
JNDI服务利用工具 RMI/LDAP,支持部分场景回显、内存shell,高版本JDK场景下利用等,fastjson rce命令执行,log4j rce命令执行 漏洞检测辅助工具
import com.sun.jndi.ldap.ctl.VirtualListViewControl;
tomcat_jndi_hibernate 是我总结的一些关于在tomcat下配置jndi数据源的方法,我用的是oracle数据库. 配置好jndi后,用于hibernate时其中也有提到
NULL 博文链接:https://zzqrj.iteye.com/blog/1279219
分多章节详细介绍了Jini技术及相关开发环境,并辅以实例作为说明。
封装JNDI的LDAP服务器所要使用的类的详细介绍。 封装JNDI操作LDAP服务器的工具类.doc
maven稀缺jar资源
JNDI课件,初学者入门使用
Maven_jndi,使用idea的tomcat7插件运行,会报错,内容是无法连接context.xml文件
提供了使用fsContext服务器的unbind bind list lookup rename的相关例子,及ldap 连接的一个例子 jndi,就是命名服务(n:naming)和目录服务(d:directory). 命名服务:把对象映射到方便记忆的名字的机制.可以通过域名系统...
AD ldap java集成
rmi-jndi-ldap-jrmp-jmx-jms rmi,jndi,ldap,jrmp,jmx,jms一些演示测试
java asm jndi_JNDI-Injection-Exploit,用于log4j2漏洞验证 可执行程序为jar包,在命令行中运行以下命令: $ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address] 其中: -C ...
集成配置与集成AD以及LDAP