属性Sun Directory ServerLDAP学习笔记(二)——API说明及代码样例

directory listing denied  时间:2021-01-22  阅读:()

从JDK5.0开始对LDAP协议的数据访问操作就被集成在javax的扩展API包中并随同JDK一并发布这一章节我们主要介绍API包中的类信息。javax.naming.directory包的结构

常用AP I解析javax.naming.directory. InitialDirContext初始化目录服务上下文类该类是LDAP数据内容的操作工具类通过该类可以执行绑定LDAP服务器、新增LDAP条目、获取条目实例、修改条目属性、删除条目和根据条件搜索条目等操作。常用方法说明如下

初始化LDAP 目录服务上下文(相当于使用JDBC打开一个数据库链接)

 InitialDirContext(Hashtable<?,?> environment)

绑定/创建LDAP条目对象相当于新增一个LDAP条目数据bind(Name name, Object obj, Attributes attrs)

 bind(String name, Object obj, Attributes attrs)

 createSubcontext(Name name, Attributes attrs)

 createSubcontext(String name, Attributes attrs)

获取条目实例属性集

 getAttributes(Name name)

 getAttributes(Name name, String[] attrIds)

 getAttributes(String name)

 getAttributes(String name, String[] attrIds)

修改条目属性

 modifyAttributes(Name name, int mod_op, Attributes attrs) modifyAttributes(Name name, ModificationItem[] mods) modifyAttributes(String name, int mod_op, Attributes attrs) modifyAttributes(String name, ModificationItem[] mods)

删除条目

 destroySubcontext(Name name)

 destroySubcontext(String name)

根据属性集搜索条目

 search(Name name, Attributes matchingAttributes)

 search(Name name, Attributes matchingAttributes, String[]attributesToReturn)

 search(String name, Attributes matchingAttributes)

 search(String name, Attributes matchingAttributes, String[]attributesToReturn)

根据过滤器搜索条目

 search(Name name, String filterExpr, Object[] filterArgs,SearchControls cons)

 search(Name name, String filter, SearchControls cons)

 search(String name, String filterExpr, Object[] filterArgs,

SearchControls cons)

 search(String name, String filter, SearchControls cons)javax.naming.directory.BasicAttribute LDAP基本属性对象

该类用来表示LDAP条目中的单个属性对象。在目录服务中每个属性名称是可以对应多个的属性值的。

构建属性对象

 BasicAttribute(String id)

 BasicAttribute(String id, boolean ordered)

 BasicAttribute(String id, Object value)

 BasicAttribute(String id, Object value, boolean ordered)添加属性值

 add(int ix, Object attrVal) 添加属性值到多值属性的指定位置

 add(Object attrVal)  追加属性值到多值属性尾部

判断属性值是否包含

 contains(Object attrVal)  多值属性中有一个值是匹配的返回true获取属性值

 get() 取得属性值中的一个

 get(int ix) 从多值属性中的指定位置取值

获取属性ID

 getID() 属性的ID就是属性名

删除属性值

 remove(int ix) 删除指定位置的属性值

 remove(Object attrval) 删除指定的属性值

javax.naming.directory.BasicAttributes LDAP实体的属性集

该类表示一个LDAP条目绑定的属性集合在绝大多数情况下一个LDAP条目存在多个属性。

构造属性集

 BasicAttributes()

 BasicAttributes(boolean ignoreCase) 属性ID是否大小写敏感建议

不要使用敏感

 BasicAttributes(String attrID, Object val)

 BasicAttributes(String attrID, Object val, boolean ignoreCase)获取属性集中的单个属性对象

 get(String attrID)

获取全部属性的枚举

 getAll ()

获取全部属性的ID枚举

 getIDs()

添加新属性

 put(Attribute attr)

 put(String attrID, Object val)

移除指定属性

 remove(String attrID)javax.naming.directory.SearchControls , LDAP目录服务搜索控制对象该类负责控制LDAP搜索行为的范围、设定返回结果数上限搜索耗时上限指定结果所包括的属性集等。

设定搜索行为的范围

 setSearchScope(int scope)

设定返回结果数上限

 setCountLimit(long limit)

设定搜索耗时上限

 setTimeLimit(int ms)  以毫秒为单位

指定结果所包括的属性集

 setReturningAttributes(String[] attrs)javax.naming.directory.SearchResult  表示. search()方法的返回结果集中的一项。

SearchResult类是对LDAP条目属性集的封装。在search()操作中可能返回完整的条目属性也可能是条目属性的一部分。

获取SearchResult封装的条目属性

 getAttributes()

以上只列举了LDAP操作API的常用部分更多更详细的描述请参考SunJava6.0 API DOC。

LDAP操作代码样例

在这个章节中我们将结合LDAP操作的代码实例了解API使用。

初始化LDAP 目录服务上下文

该例子中我们使用uid=linly,ou=People,dc=jsoso,dc=net这个账号链接位于本机8389端口的LDAP服务器ldap://localhost:8389 认证方式采用simple类型 即用户名/密码方式。

Java代码

1. private static void initialContext() throws NamingException{

2. if(singleton == null) {

3. singleton = new LDAPConnection() ;

4. /*

5. *在实际编码中这些环境变量应尽可能通过配置文件读取

6. */

7. //LDAP服务地址

8. singleton. sLDAP_URL = "ldap://localhost:8389";

9. //管理员账号

10. singleton. sMANAGER_DN = "uid=linly,ou=People,dc=jsoso,dc=net;

11. //管理员密码

12. s ingleton. sMANAGER_PASSWORD = "coffee";

13. //认证类型

14. singleton. sAUTH_TYPE = "simple";

15. //JNDI Context工厂类

16. singleton. sCONTEXT_FACTORY = "com. sun. jndi. ldap.LdapCtxFactory";

17.

18. singleton.envProps. setProperty(Context. INITIAL_CONTEXT_FACTORY, singleton. sCONTEXT_FACTORY) ;

19. singleton.envProps. setProperty(Context.PROVIDER_URL, singleton. sLDAP_URL) ;

20. singleton.envProps. setProperty(Context.SECURITY_AUTHENTICATION, singleton. sAUTH_TYPE) ;

21. singleton.envProps. setProperty(Context.SECURITY_PRINCIPAL, s ingl eton. sMANAGER_DN) ;

22. singleton.envProps. setProperty(Context.SECURITY_CREDENTIALS, s ingleton. sMANAGER_PASSWORD) ;

23. /*

24. *绑定ldap服务器

25. */

26. singleton.dirCtx = new InitialDirContext(singleton. envProps) ;

27. }

28. }

通过一个Hashtable或者Properties对象为LDAP的Context设置参数而后初始化InitialDirContext即可绑定LDAP服务。这相当于JDBC中获取数据库的Connection对象。

绑定/创建LDAP条目对象

用户可以使用b ind方法创建新的LDAP条目下面的代码创建一个DN"ou=Employee , dc=jsoso ,dc=net"的OrganizationUnit类LDAP条目如下:Java代码

1. public boolean createOrganizationUnit() {

2. String ldapGroupDN = "ou=Employee , dc=jsoso ,dc=net";

3. try {

4. /*

5. *查找是否已经存在指定的OU条目

6. *如果存在则打印OU条目的属性信息

7. *如果不存在则程序会抛出NamingException异常进入异常处理

8. */

9. Attributes attrs = dirContext.getAttributes(ldapGroupDN) ;

10. System.out.println("Find the group , attributes list :") ;

11. NamingEnumeration<String> nEnum = attrs.getIDs() ;

12. for( ; nEnum.hasMore() ; ) {

13. String attrID = nEnum.next() ;

14. Attribute attr = (Attribute)attrs.get(attrID) ;

15. System.out.println(attr. toString() ) ;

16. }

17. return false;

18. } catch (NamingException e) {

19. /*

20. *没有找到对应的Group条目新增Group条目

21. */

22. //创建objectclass属性

23. Attribute objclass = new BasicAttribute("objectclass") ;

24. objclass.add("top") ;

25. objclass.add("organizationalunit") ;

26. //创建cn属性

27. Attribute cn = new BasicAttribute("ou", "Employee") ;

28. //创建Attributes并添加objectclass和cn属性

29. Attributes attrs = new BasicAttributes() ;

30. attrs.put(objclass) ;

31. attrs.put(cn) ;

32. //将属性绑定到新的条目上创建该条目

33. try {

34. dirContext.bind(ldapGroupDN, null, attrs) ;

35. System.out.println("Group created successful") ;

36. return true;

37. } catch (NamingException e1) {

38. e1.printStackTrace() ;

39. }

40. }

41. return false;

42. }

或者使用createSubcontext方法创建亦可 以下例子我们新增一个inetorgperson类的LDAP条目

Java代码

1. /**

2. *创建LDAP用户条目

3. * @param user

4. * @return

5. */

6. public boolean createUser(LDAPUser user) {

7. if(user == null) {

8. return false;

9. }

10.

11. if(user.getUserID() == null | | user.getUserID() . length() ==

0

12. | | user.getFirstName() == null | | user.getFirstName() . length() == 0

13. | | user.getLastName() == null | | user.getLastName(). length() == 0

14. | | user.getCommomName() == nul l | | user.getCommomName() . length() == 0) {

15. return false;

16. }

17.

18. //判断用户条目是否已经存在

19. if(isUserexist(user.getDistinguishedName() ) ) {

20. return true;

21. }

22.

23. /*

24. *新建条目属性集

25. */

26. Attributes attrs = new BasicAttributes() ;

27. setBasicAttribute(attrs , "objectclass" , "top,person,organizationalPerson, inetorgperson") ;

28. setBasicAttribute(attrs , "cn" , user.getCommomName() ) ;

29. setBasicAttribute(attrs , "givenname" , user.getFirstName()) ;

30. setBasicAttribute(attrs , "sn" , user.getLastName() ) ;

31. setBasicAttribute(attrs , "uid" , user.getUserID() ) ;

32. setBasicAttribute(attrs , "userpassword" , user.getPassword() ) ;

33.

34. //添加用户条目节点

35. try {

36. dirContext.createSubcontext(user.getDistinguishedName(), attrs) ;

37. System.out.println("Add User(" + user.getDistinguishedName() + ") ok. ") ;

38. return true;

39. } catch (NamingException e) {

40. e.printStackTrace() ;

41. }

42. return false;

43. }

获取条目属性

下面一段代码获取entryDN参数指定条目中的属性集合并打印到控制台Java代码

1. /**

2. *获取一个指定的LDAP Entry

3. * @param entryDN

4. */

5. public void find(String entryDN) {

6. try {

7. Attributes attrs = dirContext.getAttributes(entryDN) ;

8. if (attrs != null) {

9. NamingEnumeration<String> nEnum = attrs.getIDs() ;

10. for( ; nEnum.hasMore() ; ) {

11. String attrID = nEnum.next() ;

12. Attribute attr = (Attribute)attrs.get(attrID) ;

妮妮云,美国cera CN2线路,VPS享3折优惠

近期联通CUVIP的线路(AS4837线路)非常火热,妮妮云也推出了这类线路的套餐以及优惠,目前到国内优质线路排行大致如下:电信CN2 GIA>联通AS9929>联通AS4837>电信CN2 GT>普通线路,AS4837线路比起前两的优势就是带宽比较大,相对便宜一些,所以大家才能看到这个线路的带宽都非常高。妮妮云互联目前云服务器开放抽奖活动,每天开通前10台享3折优惠,另外...

HostKvm开年促销:香港国际/美国洛杉矶VPS七折,其他机房八折

HostKvm也发布了开年促销方案,针对香港国际和美国洛杉矶两个机房的VPS主机提供7折优惠码,其他机房业务提供8折优惠码。商家成立于2013年,提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。下面列出几款主机配置信息。美国洛杉矶套餐:美国 US-Plan1CPU:1core内存:2GB硬盘...

ftlcloud9元/月,美国云服务器,1G内存/1核/20g硬盘/10M带宽不限/10G防御

ftlcloud(超云)目前正在搞暑假促销,美国圣何塞数据中心的云服务器低至9元/月,系统盘与数据盘分离,支持Windows和Linux,免费防御CC攻击,自带10Gbps的DDoS防御。FTL-超云服务器的主要特色:稳定、安全、弹性、高性能的云端计算服务,快速部署,并且可根据业务需要扩展计算能力,按需付费,节约成本,提高资源的有效利用率。活动地址:https://www.ftlcloud.com...

directory listing denied为你推荐
美女桌面背景图片适合女生的电脑壁纸桌面背景图片非主流想下载非主流桌面背景,有没有专业的背景平台提供下载啊?qq空间首页QQ空间主页怎么弄?租车平台哪个好租车哪个平台好点,都要什么费用?输入法哪个好用五笔输入法哪个最好用轿车和suv哪个好SUV和轿车哪个好点?纠结朗逸和速腾哪个好买同等价位的朗逸和速腾哪个好?手机管家哪个好手机管家和腾讯手机管家哪个好用车险哪个好人保和平安车险哪个好清理手机垃圾软件哪个好清理手机垃圾的软件哪个好
域名转让 景安vps 动态ip的vps 域名抢注工具 awardspace Dedicated godaddy优惠码 免费静态空间 日本空间 本网站服务器在美国 福建天翼加速 新天域互联 jsp空间 免费个人空间 徐正曦 万网空间购买 创建邮箱 独享主机 华为k3 酷锐 更多