当前位置: 首页 > news >正文

遍历查询ldap服务器用户

准备工作:使用openldap搭建server 过程略

名词

DN = Distinguished Name
DC = Domain Component
OU = Organization Unit
CN = Common Name
RDN = Relative DN
UID = User ID

1.初始化

    protected static int init() {
        int flag = 0;
        try {
            ldapHost = "192.168.1.1";
            ldapNameAll = "ldap://" + ldapHost;
            ldapPort = 389;
            rootEntry ="dc=sysu,dc=edu,dc=cn";
            rootdn = "uid=rgsam,ou=hosts,dc=sysu,dc=edu,dc=cn";
            rootpw = "111";         
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, ldapNameAll + ":" + ldapPort);
            env.put("com.sun.jndi.ldap.connect.timeout", "3000");
                if (rootdn != null && !rootdn.equals("") && rootpw != null && !rootpw.equals("")) {
                    env.put(Context.SECURITY_AUTHENTICATION, "simple");
                    env.put(Context.SECURITY_PRINCIPAL, rootdn);
                    env.put(Context.SECURITY_CREDENTIALS, rootpw);
                }
            ctx = new InitialDirContext(env);
        } catch (Exception e) {
            flag = -1;
        }
        //返回初始化是否成功的标志位
        return flag;
    }

 

2.遍历查询

    protected static int getProcessResultBatch(DirContext ctx,int limit) {
           try {
               String userObjectClass = "eduPerson";
               String userIdAttrName ="uid";
               String userPwdAttrName = "userPassword";
               String userAccessTimeAttrName ="radiusExpiration";
               String ldapFilter = "";
               String ldapPassword = null;
               String ldapAccessTime = null;
               String[] attrList = null;
               String rootEntry="dc=sysu,dc=edu,dc=cn";
               
               String searchFilter = "(&(objectClass=" + userObjectClass +  "))";
               //Filter可自定义,一旦定义了Filter则ObjectClass就无效了
               if (ldapFilter != null && !ldapFilter.equals("")) {
                   //searchFilter = StringUtil.str_replace(ldapFilter, "%{User-Name}", userId);
               }
              
                   attrList = new String[] {userPwdAttrName, userAccessTimeAttrName};
               
               String dn = null;
               NamingEnumeration ne = null;
               try {
                   SearchControls controls = new SearchControls(SearchControls.SUBTREE_SCOPE, limit, 0, attrList, false, false);
                   ne = ctx.search(rootEntry, searchFilter, controls);
               } catch (Exception e) {
                   return RESULT_ERR_CONNECT;
               }
               while(ne.hasMore()) {
                   SearchResult sr = (SearchResult)ne.next();
                   Attributes attrs = sr.getAttributes();
                   Attribute passwordAttr = attrs.get(userPwdAttrName);
                   ldapPassword = new String((byte[]) passwordAttr.get());
                   if(ldapPassword == null){
                       return RESULT_ERR_PASSWORD;
                   }
                       Attribute accessTimeAttr = attrs.get(userAccessTimeAttrName);
                       ldapAccessTime = (String)accessTimeAttr.get();
                       dn = sr.getNameInNamespace();
                       System.out.println(dn.toString());
               }    
           } catch (Exception e) {
               return RESULT_ERR_CONNECT;
           }
           return RESULT_SUCCESS;
       }

3.测试程序

      int ret=init();
        if(ret==0){
            System.out.println("LDAP初始化成功");
        }else{
            System.out.println("LDAP初始化失败");
        }
       int result=getProcessResultBatch(ctx,100);
       if(result==RESULT_SUCCESS){
           System.out.println("RESULT_SUCCESS");             
       }else if(result==RESULT_ERR_CONNECT){
          // System.out.println("RESULT_ERR_CONNECT");
       }else if(result==RESULT_ERR_NOUSER){
           System.out.println("RESULT_ERR_NOUSER");
       }else if(result==RESULT_ERR_PASSWORD){
           System.out.println("RESULT_ERR_PASSWORD");
       }else{
           System.out.println("RESULT_OTHER");
       }

 

 

相关文章:

  • ARM推出全球功耗效率最高的64位处理器Cortex-A50系列
  • Android查看stdout 和stderr
  • png图片格式 (share)
  • uva 106 Fermat vs. Pythagoras
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • 老说技术更迭快,可十年到底可以淘汰多少知识?
  • 统计登录人数
  • 【Android游戏开发二十一】Android os设备谎言分辨率的解决方案!以及简单阐述游戏引擎如何使用!...
  • 图片翻转动画效果
  • “Incorrect Architecture” when trying to install iPhone app onto my development device
  • 邮件营销整体解决方案
  • java 字符串操作大全2 split 详解
  • cocos2d在iOS5sdk编译时警告的解决方法
  • oracl 中两种临时表的创建
  • #162 (Div. 2)
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [译]CSS 居中(Center)方法大合集
  • 【node学习】协程
  • 2017年终总结、随想
  • CSS3 变换
  • Django 博客开发教程 16 - 统计文章阅读量
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Java小白进阶笔记(3)-初级面向对象
  • Redux 中间件分析
  • Terraform入门 - 3. 变更基础设施
  • Unix命令
  • 百度地图API标注+时间轴组件
  • 包装类对象
  • 简单基于spring的redis配置(单机和集群模式)
  • 区块链技术特点之去中心化特性
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 微信小程序:实现悬浮返回和分享按钮
  • 在electron中实现跨域请求,无需更改服务器端设置
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​一些不规范的GTID使用场景
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (第一天)包装对象、作用域、创建对象
  • (二)WCF的Binding模型
  • (分布式缓存)Redis分片集群
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (九)信息融合方式简介
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • ***检测工具之RKHunter AIDE
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net 按比例显示图片的缩略图
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET值类型变量“活”在哪?
  • .net中调用windows performance记录性能信息
  • /run/containerd/containerd.sock connect: connection refused