JNDI方式查询LDAP


import java.util.Properties;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.ModificationItem;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;

 

public class testClient {
 
 public void  testSearch(){
  
  
  String dn="cn=Manager,dc=xxx,dc=com";
  String searchDn1="ou=users,dc=xxx,dc=com";
  String searchDnFilter="(|(cn=samwong)(telephoneNumber=12345678))";
  
        Properties hs = new Properties();
        hs.setProperty(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
  hs.setProperty(Context.PROVIDER_URL,"ldap://192.168.1.177:389");
  hs.setProperty(Context.SECURITY_AUTHENTICATION,"simple");
  hs.setProperty(Context.SECURITY_PRINCIPAL,dn);
  hs.setProperty(Context.SECURITY_CREDENTIALS,"password");  
  
        try {
           /*指定了JNDI服务提供者中工厂类(factory class)的名称。Factory负
               责为其服务创建适当的InitialContext对象。在上面的代码片断中,为文件
                系统服务提供者指定了工厂类*/
           DirContext ctx = new InitialDirContext(hs);
          
           System.out.println("成功创建初始化context对象!");
           SearchControls constraints = new SearchControls();
           constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
          
           NamingEnumeration en = ctx.search(searchDn1,searchDnFilter, constraints);
           while (en != null && en.hasMoreElements()) {
               Object obj = en.nextElement();
               if (obj instanceof SearchResult) {
                   SearchResult si = (SearchResult) obj;
                   System.out.println("name:   " + si.getName());
                 
                   Attributes attrs = si.getAttributes();
                   if (attrs == null) {
                       System.out.println("No   attributes");
                   } else {
                       Attribute attr = attrs.get("userPassword");
                       if(attr!=null){
                        Object o = attr.get();
                        byte[] s = (byte[]) o;
                        String pwd2 = new String(s);
                        System.out.println(pwd2);
                       }
                   }
               } else {
                   System.out.println(obj);
               }
               System.out.println();
           }


           //ctx.lookup(name);
           //Person obj=(Person) ctx.lookup(searchDn);
           //System.out.print("personname:"+obj.getName()+"psersonage:"+obj.getAge());
          
           ctx.close();
        }catch(Exception ex ){
           ex.printStackTrace();
           System.exit(1);
        }  
  
/*  

  String dn="cn=Manager,dc=xxx,dc=com";
  String searchDn="cn=SamWong,ou=users,dc=xxx,dc=com";
  
  
        Properties hs = new Properties();
        hs.setProperty(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
  hs.setProperty(Context.PROVIDER_URL,"ldap://192.168.1.177:389");
  hs.setProperty(Context.SECURITY_AUTHENTICATION,"simple");
  hs.setProperty(Context.SECURITY_PRINCIPAL,dn);
  hs.setProperty(Context.SECURITY_CREDENTIALS,"password");  
  
        try {
           指定了JNDI服务提供者中工厂类(factory class)的名称。Factory负
               责为其服务创建适当的InitialContext对象。在上面的代码片断中,为文件
                系统服务提供者指定了工厂类
           DirContext ctx = new InitialDirContext(hs);
          
           System.out.println("成功创建初始化context对象!");
          
           //ctx.lookup(name);
           Object obj=ctx.lookup(searchDn);
          
          
           ctx.get(searchDn)
           ctx.close();
        }catch(Exception ex ){
           ex.printStackTrace();
           System.exit(1);
        }*/

  
 }
 

 /**
  * @param args
  */
 public static void main(String[] args) {
  testClient client=new testClient();
  client.testSearch();
  

 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值