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

美国高防云服务器 1核 1G 26元/月 香港/日本站群服务器 E5 16G 1600元/月 触摸云

触摸云国内IDC/ISP资质齐全商家,与香港公司联合运营, 已超8年运营 。本次为大家带来的是双12特惠活动,美国高防|美国大宽带买就可申请配置升档一级[CPU内存宽带流量选一]升档方式:CPU内存宽带流量任选其一,工单申请免费升级一档珠海触摸云科技有限公司官方网站:https://cmzi.com/可新购免费升档配置套餐:地区CPU内存带宽数据盘价格购买地址美国高防 1核 1G10M20G 26...

华纳云不限流量¥324/年,香港双向CN2(GIA)云服务器/1核1G/50G存储/2Mbps

华纳云(HNCloud Limited)是一家专业的全球数据中心基础服务提供商,总部在香港,隶属于香港联合通讯国际有限公司,拥有香港政府颁发的商业登记证明,保证用户的安全性和合规性。 华纳云是APNIC 和 ARIN 会员单位。主要提供香港和美国机房的VPS云服务器和独立服务器。商家支持支付宝、网银、Paypal付款。华纳云主要面向国内用户群,所以线路质量还是不错的,客户使用体验总体反响还是比较好...

ZJI-全场八折优惠,香港服务器 600元起,还有日本/美国/韩国服务器

ZJI怎么样?ZJI是一家成立于2011年的商家,原名维翔主机,主要从事独立服务器产品销售,目前主打中国香港、日本、美国独立服务器产品,是一个稳定、靠谱的老牌商家。详情如下:月付/年付优惠码:zji??下物理服务器/VDS/虚拟主机空间订单八折终身优惠(长期有效)一、ZJI官网点击直达香港葵湾特惠B型 CPU:E5-2650L核心:6核12线程内存:16GB硬盘:480GB SSD带宽:5Mbps...

directory listing denied为你推荐
cf蜗牛外挂蜗牛透视如何使用杀毒软件哪个好杀毒软件哪个好用手机浏览器哪个好手机上的浏览器哪个比较好?传奇类手游哪个好腾讯热血传奇手机版哪个职业厉害少儿英语哪个好少儿英语哪个好网页传奇哪个好玩哪个传奇类网页游戏即好玩又不花钱??手机管家哪个好手机管家哪个好p图软件哪个好有什么P图工具比较好用百度空间登录百度空间怎么登陆牡丹江教育云空间登录牡丹江教育云平台学生注册错了怎么办?
edgecast 便宜域名 webhostingpad mediafire下载工具 便宜建站 iisphpmysql 账号泄露 iis安装教程 密码泄露 牛人与腾讯客服对话 php空间申请 毫秒英文 腾讯云分析 bgp双线 工信部icp备案号 美国在线代理服务器 便宜空间 lamp怎么读 阿里云邮箱登陆地址 xuni 更多