• 1. LDAP-TDS学习笔记张凯 2014-09
  • 2. TDS安装安装完成后: 运行Web管理工具,登录:superadmin/secret。 添加服务器,再次运行Web管理工具,用cn=root进行登录,即可管理LDAP.
  • 3. 安装:添加后缀可以是域,也可以是组织 dc=com(domain) or o=soa (organization)
  • 4. 组织机构示例1organizationperson organizationlPerson inetOrgPersondomain 通过添加后缀创建organizationlUnit
  • 5. 条目:DN(条目标识)DN:o=soa,dc=comDN:dc=comDN ou=研发部,o=soa,dc=comDN uid=user1,ou=研发部,o=soa,dc=com DN = RDN,PDN图中每个元素,称为条目。
  • 6. 组织机构示例2organizationgroupOfNames groupOfUniquenamesperson organizationlPerson inetOrgPersondomain 通过添加后缀创建organizationlUnit or containermember
  • 7. 比较:示例1示例2直观不直观 (可以通过程序进行直观显示)组织机构调整不方便 组织机构调整时,所有子节点,均要调整。组织机构调整方便因此在实际项目中, 多采用示例2的方式
  • 8. ObjectClass对象类对象类常用属性域domaindc组织organizationo组织单元organizationalUnitunit组groupOfNamesmembergroupOfUniqueNamesuniqueMember人员organizationlPersion inetOrgPersonuid cn sn
  • 9. 对象类的属性person属性personcnuserPasswordsn必需属性可选属性TopTop属性objectClassperson对象类,继承Top对象类。 因此persion包含Top的属性。Top对象类是其他所有对象类的基类属性: 1)单值、多值 2)必需、可选
  • 10. 条目、与对象类的关系条目person属性personcnuserPasswordsninetOrgPersonperson属性uidTopTop属性objectClass
  • 11. 条目管理--新建条目-step1选择对象类
  • 12. 条目管理--新建条目-step2一般情况,可以不添加辅助对象类。 如果添加了辅助对象类,则该条目将包含辅助类属性。
  • 13. 条目管理--新建条目-step3录入DN,以及必需属性
  • 14. 条目管理--新建条目-step4
  • 15. TDS第三方管理工具-JXplorer
  • 16. LDAP-API//LDAP连接 Hashtable ldapEnv = new Hashtable(); ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); ldapEnv.put(Context.PROVIDER_URL, "ldap://" + server + ":" + port); ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); ldapEnv.put(Context.SECURITY_PRINCIPAL, user); ldapEnv.put(Context.SECURITY_CREDENTIALS, password); LdapContext ldapConn= new InitialLdapContext (ldapEnv, null); //关闭连接 ldapConn.close();
  • 17. LDAP-API//查询 String baseDN=" ou=users,o=soa,dc=com"; //搜索起始DN String filter="(&(objectClass=Top)(objectClass=inetOrgPerson)(cn=张三))"; //搜索条件 SearchControls searchCons=new SearchControls(); searchCons.setSearchScope(SearchControls.SUBTREE_SCOPE); // 搜索层次 searchCons.setTimeLimit(0); searchCons.setReturningAttributes(null); //返回所有字段 searchCons.setReturningAttributes(new String[] { "cn","uid" }); // 返回指定字段 NamingEnumeration fetchResult = ldapConn.search(baseDN, filter,searchCons); //查询 //解析结果:需要经过三层遍历:条目-->属性-->属性值1)查询组下包含的成员:遍历结果中member属性即可 2)查询成员所属组: 将条件设为member=xxDN,执行查询并遍历结果即可。 (因此,实际上不需要双向记录)搜索层次: 1)SUBTREE_SCOPE: 搜索baseDN及子节点 2)OBJECT_SCOPE:仅搜索baseDN (一般用于查询DN) 3)ONELEVEL_SCOPE:仅搜索baseNN的子节点。
  • 18. LDAP-API//排序、分页 (需要ldapbp.jar,在sun公司提供,在tds安装目录下可找到该jar包。) SortControl s = new SortControl(new String[] {"sn","uid"}, true); //排序 VirtualListViewControl p = new VirtualListViewControl(startNo, 0, 0, pageSize - 1, Control.CRITICAL); //分页 Control[] c = new Control [] { s,p}; //构造排序、分页控制器 ldapConn.setRequestControls(c); //该语句应在 .search()方法之前执行。
  • 19. LDAP-API//创建条目 //修改条目 //删除条目
  • 20. LDAP适配器用户DNuid (唯一)cn组DNcn (唯一)member用户关联组查询: 一对多:条件member=dn角色DNcnmember组关联用户查询:多值包含关联 DN=member1 or DN= member2
  • 21. LDAP适配器用户DNuid (唯一)组+用户DNuidcnmember组关联用户查询:多值包含关联 DN=member1 or DN= member2组DNcn (唯一)