属性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) ;

knownhost西雅图/亚特兰大/阿姆斯特丹$5/月,2个IP1G内存/1核/20gSSD/1T流量

美国知名管理型主机公司,2006年运作至今,虚拟主机、VPS、云服务器、独立服务器等业务全部采用“managed”,也就是人工参与度高,很多事情都可以人工帮你处理,不过一直以来价格也贵。也不知道knownhost什么时候开始运作无管理型业务的,估计是为了扩展市场吧,反正是出来较长时间了。闲来无事,那就给大家介绍下“unmanaged VPS”,也就是无管理型VPS,低至5美元/月,基于KVM虚拟,...

Megalayer美国独立服务器新用户首月优惠350元(30M优化不限流量)

Megalayer 商家在开始看到有提供香港服务器、香港站群服务器的时候有介绍过,后来就一直没有怎么关注。但是前几天有看到网友使用到他们家的美国独立服务器问其如何的,但是我没有使用过就不好评论,这不前几天也有介绍到Megalayer美国独立服务器。以及我们也有看到商家有提供美国站群服务器和美国大带宽服务器产品,可选30M不限制流量CN2优化线路,以及100M不限制流量国际带宽线路。新年元旦后,Me...

hostodo:美国大流量VPS,低至$3,8T流量/月-1.5G内存/1核/25gNVMe/拉斯维加斯+迈阿密

hostodo从2014年年底运作至今一直都是走低价促销侧率运作VPS,在市场上一直都是那种不温不火的品牌知名度,好在坚持了7年都还运作得好好的,站长觉得hostodo还是值得大家在买VPS的时候作为一个候选考虑项的。当前,hostodo有拉斯维加斯和迈阿密两个数据中心的VPS在促销,专门列出了2款VPS给8T流量/月,基于KVM虚拟+NVMe整列,年付送DirectAdmin授权(发ticket...

directory listing denied为你推荐
集成显卡和独立显卡哪个好独立显卡和集成显卡区别??免费阅读小说app哪个好什么小说软件好用又免费莫代尔和纯棉哪个好莫代尔和纯棉内裤哪个好?手机浏览器哪个好手机上的浏览器哪个比较好?压缩软件哪个好压缩软件用哪个会比较好用浮动利率和固定利率哪个好贷款选择浮动利率还是固定利率核芯显卡与独立显卡哪个好核芯显卡与独立显卡哪个好oppo和vivo哪个好OPPO手机和vivo手机哪个好?清理手机垃圾软件哪个好什么手机清理软件最好?美国国际集团全球500强有哪些企业是美国的
韩国虚拟主机 大连虚拟主机 沈阳虚拟主机 免费域名注册 代理域名备案 罗马假日广场 仿牌空间 hawkhost优惠码 外国服务器 香港新世界电讯 申请空间 权嘉云 200g硬盘 网页提速 网站加速软件 ebay注册 美国盐湖城 阵亡将士纪念日 双十二促销 塔式服务器 更多