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

美国G口/香港CTG/美国T级超防云/物理机/CDN大促销 1核 1G 24元/月

[六一云迎国庆]转盘活动实物礼品美国G口/香港CTG/美国T级超防云/物理机/CDN大促销六一云 成立于2018年,归属于西安六一网络科技有限公司,是一家国内正规持有IDC ISP CDN IRCS电信经营许可证书的老牌商家。大陆持证公司受大陆各部门监管不好用支持退款退现,再也不怕被割韭菜了!主要业务有:国内高防云,美国高防云,美国cera大带宽,香港CTG,香港沙田CN2,海外站群服务,物理机,...

乌云数据(10/月),香港cera 1核1G 10M带宽/美国cera 8核8G10M

乌云数据主营高性价比国内外云服务器,物理机,本着机器为主服务为辅的运营理念,将客户的体验放在第一位,提供性价比最高的云服务器,帮助各位站长上云,同时我们深知新人站长的不易,特此提供永久免费虚拟主机,已提供两年之久,帮助了上万名站长从零上云官网:https://wuvps.cn迎国庆豪礼一多款机型史上最低价,续费不加价 尽在wuvps.cn香港cera机房,香港沙田机房,超低延迟CN2线路地区CPU...

ZJI(月付480元),香港阿里云专线服务器

ZJI是成立于2011年原Wordpress圈知名主机商—维翔主机,2018年9月更名为ZJI,主要提供香港、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册业务。本月商家针对香港阿里云线路独立服务器提供月付立减270-400元优惠码,优惠后香港独立服务器(阿里云专线)E3或者E5 CPU,SSD硬盘,最低每月仅480元起。阿里一型CPU:Intel E5-2630L...

directory listing denied为你推荐
手机浏览器哪个好手机上的浏览器哪个比较好?手机音乐播放器哪个好手机音乐播放器什么的好?手机杀毒哪个好手机杀毒软件哪个好 五大手机安全软件杀毒大比拼海克斯皮肤哪个好LOL用100块是抽海克斯好还是抽蛮王的生化领主的活动还是直接买皮肤好百度空间登录百度空间怎么登陆考生个人空间登录自学考试的“考生个人空间”密码忘记了……一定要本人带身份证和考籍证去有关部门吗?辽宁联通营业厅辽宁移动网上营业厅进入办法电信dns服务器地址电信现在DNS服务器地址是多少360云盘360云盘和百度云网盘哪个好360云查杀360安全卫士中的木马云查杀有用吗?
免费域名注册 免费域名申请 a5域名交易 拜登买域名批特朗普 vir host1plus 香港主机 美国主机论坛 表格样式 日志分析软件 好看的桌面背景大图 魔兽世界台湾服务器 嘉洲服务器 小米数据库 seednet 129邮箱 卡巴斯基试用版 免费测手机号 paypal注册教程 购买国外空间 更多