- 论坛徽章:
- 0
|
JNDI学习笔记(一)
由于我的工作主要是对Directory Service进行操作,所以重点学习了,javax.naming.directory包中的类.以下的几个例子演示从LDAP上查询ENTRY并得到属性和属性值.
假设我的LDAP是这样存放的: 根节点c=com 二级节点 ou=t 以及其它 三级节点 ou = xc 以及其它 四级节点 cn=bsj. LDAP服务器安装在我自己的机器上。
下面的一个例子是找到一个entry(object/节点,一个意思).然后取出所有的属性值。
- package study.jndi;
- import java.util.Hashtable;
- import javax.naming.Context;
- import javax.naming.NamingException;
- import javax.naming.NamingEnumeration;
- import javax.naming.directory.DirContext;
- import javax.naming.directory.Attribute;
- import javax.naming.directory.Attributes;
- import javax.naming.directory.InitialDirContext;
- public class GetAttr{
- public static final String ENTRY_NAME = "cn=bsj,ou=xc,ou=t,c=com";
- public static void main(String[] args){
-
- Hashtable env = new Hashtable();
- env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
- env.put(Context.PROVIDER_URL,"ldap://127.0.0.1:10389/"); //login the ldap server
- try{
- DirContext ctx = new InitialDirContext(env);
- Attributes allAttr = ctx.getAttributes(ENTRY_NAME); //get *a* object's all attributes
- for(NamingEnumeration attrs = allAttr.getAll();attrs.hasMore();){
- Attribute attr = (Attribute)attrs.next();
- System.out.println("Attribute is : " + attr.getID());
- for(NamingEnumeration values = attr.getAll();values.hasMore();){
- System.out.println(" value is : " + values.next());
- }
- }
-
- }catch(NamingException ex){
- ex.printStackTrace();
- }
- System.out.println("SUCCESS!");
- }
- }
复制代码
这个例子需要到同样的地址下载ldap.jar然后加入到CLASSPATH中,就可以执行,当然要保证你有一个配置到的LDAP服务器,我的是公司专用的服务器并且是配置好的,所以你要去找一个LDAP服务器安装好在运行这个例子。这个例子的原理就是用ctx根据节点的DN(专有名词,可以看做是文件名)来查找这个entry的所有属性,然后在从属性中得到所有的值,注意一个属性可以有多个值,如果你熟悉LDAP就会知道了。
下边这个例子在以上的例子基础上加了一个设置entry返回的属性都有哪些。
- package study.jndi;
- import java.util.Hashtable;
- import javax.naming.Context;
- import javax.naming.NamingException;
- import javax.naming.NamingEnumeration;
- import javax.naming.directory.DirContext;
- import javax.naming.directory.InitialDirContext;
- import javax.naming.directory.Attribute;
- import javax.naming.directory.Attributes;
- public class GetAttr2{
- public static final String ENTRY_NAME = "cn=bsj,ou=xc,ou=t,c=com";
- public static void main(String[] args){
- Hashtable env = new Hashtable();
- env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
- env.put(Context.PROVIDER_URL,"ldap://127.0.0.1:10389/"); //login the ldap server
- String[] attrNames = new String[]{"abc"}; //get a attribute's value
- try{
- DirContext ctx = new InitialDirContext(env);
- Attributes attrs = ctx.getAttributes(ENTRY_NAME,attrNames);
- for(NamingEnumeration ae = attrs.getAll();ae.hasMore();){
- Attribute attr = (Attribute)ae.next();
- System.out.println("Attribute : " + attr.getID());
- for(NamingEnumeration ve = attr.getAll();ve.hasMore();){
- System.out.println(" Value : " + ve.next());
- }
- }
- }catch(NamingException ex){
- ex.printStackTrace();
- }
- System.out.println("SUCCESS!");
- }
- }
复制代码 |
|