JNDI基本介绍
JNDI(Java Naming and Directory Interface–Java命名和目录接口)是Java中为命名和目录服务提供接口的API,通过名字可知道,JNDI主要由两部分组成:Naming(命名)和Directory(目录),其中Naming是指将对象通过唯一标识符绑定到一个上下文Context,同时可通过唯一标识符查找获得对象,而Directory主要指将某一对象的属性绑定到Directory的上下文DirContext中,同时可通过名字获取对象的属性同时操作属性。
JNDI架构图
JNDI主要由JNDI API和JNDI SPI两部分组成,Java应用程序通过JNDI API访问目录服务,而JNDI API会调用Naming Manager实例化JNDI SPI,然后通过JNDI SPI去操作命名或目录服务其如LDAP, DNS,RMI等,JNDI内部已实现了对LDAP,DNS, RMI等目录服务器的操作API。
JNDI核心API
类名 | 描述 |
---|---|
Context | 命名服务的接口类,由很多的name-to-object的健值对组成,可以通过该接口将健值对绑定到该类中,也可通过该类根据name获取其绑定的对象 |
InitialContext | Naming(命名服务)操作的入口类,通过该类可对命名服务进行相关的操作 |
DirContext | Directory目录服务的接口类,该类继承自Context,在Naming服务的基础上扩展了对于对象属性的绑定和获取操作 |
InitialDirContext | Directory目录服务相关操作的入口类,通过该类可进行目录相关服务的操作 |
- Context核心方法
/**可根据Name实现类或者字符串name去获取绑定在context中的对象**/
public Object lookup(Name name) throws NamingException;
public Object lookup(String name) throws NamingException;
/**可使用Name实现类或者字符串name将对象绑定到Context中*/
public void bind(Name name, Object obj) throws NamingException;
public void bind(String name, Object obj) throws NamingException;
- DirContext核心方法
/**可根据Name或者name获取绑定对象的所有已关联的属性*/
public Attributes getAttributes(Name name) throws NamingException;
public Attributes getAttributes(String name) throws NamingException;
/**可根据Name或者name和属性标识符id相关联的属性/
public Attributes getAttributes(Name name, String[] attrIds)
throws NamingException;
public Attributes getAttributes(String name, String[] attrIds)
throws NamingException;
/**将Name和Object绑定起来,同时将属性关联到相应的对象上去*/
public void bind(Name name, Object obj, Attributes attrs)
throws NamingException;
public void bind(String name, Object obj, Attributes attrs)
throws NamingException;
JNDI操作目录服务代码编写
下面会以通过JNDI API去访问Sun的LDAP为实例
1.为初始化上下文选择服务提供者
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
2.提供初始化上下文需要的信息
env.put(Context.PROVIDER_URL, "ldap://127.0.0.1:389");
env.put(Context.SECURITY_PROTOCOL, "plain");
env.put(Context.SECURITY_PRINCIPAL, "admin");
env.put(Context.SECURITY_CREDENTIALS, "admin");
3.创建初始化上下文
InitialDirContext ctx = new InitialDirContext(env);
4.查询对象
Object obj = ctx.lookup("cn=zhangsan,ou=People");
版权声明:本文为qinwuxian19891211原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。