- 浏览: 1013143 次
- 性别:
- 来自: 福州
最新评论
-
guanxin2012:
大神,您好。非常感谢您贡献了IKExpression。我们现在 ...
分享开源表达式解析器IK-Expression2.0 -
qqgigas:
LZ,public boolean createUser(LD ...
Sun Directory Server/LDAP学习笔记(二)——API说明及代码样例 -
gao_shengxian:
Hibernate: update T_GX_TEST set ...
优雅Java编程 之 使用Hibernate存储Oracle Spatial对象 -
a78113534:
感谢大神,在安卓里面调用成功了。
发布IK Expression开源表达式解析器 V2.1.0 -
majiedota:
加油
来自开源支持者的第一笔捐赠
相关文章:Sun Directory Server/LDAP学习笔记(一)——LDAP协议简述
Java6.0 API for LDAP概述
从JDK5.0开始,对LDAP协议的数据访问操作就被集成在javax的扩展API包中,并随同JDK一并发布,这一章节,我们主要介绍API包中的类信息。
javax.naming.directory 包的结构
常用API解析
javax.naming.directory.InitialDirContext,初始化目录服务上下文类
该类是LDAP数据内容的操作工具类,通过该类可以执行绑定LDAP服务器、新增LDAP条目、获取条目实例、修改条目属性、删除条目和根据条件搜索条目等操作。常用方法说明如下:
初始化LDAP 目录服务上下文(相当于使用JDBC打开一个数据库链接)
绑定/创建LDAP条目对象(相当于新增一个LDAP条目数据bind(Name
获取条目实例(属性集)
修改条目属性
删除条目
根据属性集搜索条目
根据过滤器搜索条目
javax.naming.directory.BasicAttribute,LDAP基本属性对象
该类用来表示LDAP条目中的单个属性对象。在目录服务中,每个属性名称是可以对应多个的属性值的。
构建属性对象
添加属性值
判断属性值是否包含
获取属性值
获取属性ID
删除属性值
javax.naming.directory.BasicAttributes,LDAP实体的属性集
该类表示一个LDAP条目绑定的属性集合,在绝大多数情况下,一个LDAP条目存在多个属性。
构造属性集
获取属性集中的单个属性对象
获取全部属性的枚举
获取全部属性的ID枚举
添加新属性
移除指定属性
javax.naming.directory.SearchControls , LDAP目录服务搜索控制对象
该类负责控制LDAP搜索行为的范围、设定返回结果数上限,搜索耗时上限,指定结果所包括的属性集等。
设定搜索行为的范围
设定返回结果数上限
设定搜索耗时上限
指定结果所包括的属性集
javax.naming.directory.SearchResult , 表示.search() 方法的返回结果集中的一项。
SearchResult类是对LDAP条目属性集的封装。在search()操作中可能返回完整的条目属性,也可能是条目属性的一部分。
获取SearchResult封装的条目属性
以上只列举了LDAP操作API的常用部分,更多更详细的描述,请参考 Sun Java6.0 API DOC。
LDAP操作代码样例
在这个章节中,我们将结合LDAP操作的代码实例了解API使用。
初始化LDAP 目录服务上下文
该例子中,我们使用uid=linly,ou=People,dc=jsoso,dc=net这个账号,链接位于本机8389端口的LDAP服务器(ldap://localhost:8389),认证方式采用simple类型,即用户名/密码方式。
通过一个Hashtable或者Properties对象为LDAP的Context设置参数,而后初始化InitialDirContext,即可绑定LDAP服务。这相当于JDBC中获取数据库的Connection对象。
绑定/创建LDAP条目对象
用户可以使用bind方法创建新的LDAP条目,下面的代码创建一个DN:"ou=Employee , dc=jsoso ,dc=net"的OrganizationUnit类LDAP条目如下:
或者使用createSubcontext方法创建亦可,以下例子我们新增一个inetorgperson类的LDAP条目:
获取条目属性
下面一段代码获取entryDN参数指定条目中的属性集合,并打印到控制台
修改条目属性
修改DN=user.getDistinguishedName()的条目中的cn、givenname、sn和userpassword四个属性值。
(注:参数DirContext.REPLACE_ATTRIBUTE有另外两个常量:DirContext.ADD_ATTRIBUTE;DirContext.REMOVE_ATTRIBUTE,分别表示新增属性和删除属性。)
删除条目
删除DN= userDN条目
根据属性集搜索条目
根据属性集matchingAttributes中的匹配值,在上下文DN= "ou=People,dc=jsoso ,dc=net"中搜索它的所有子树中的匹配条目。
(注:SearchControls的SCOPE参数详见SearchControls SCOPE补充说明)
根据过滤器搜索条目
根据过滤器条件,在上下文DN = "ou=People,dc=jsoso ,dc=net"中,搜索它的所有子树中的匹配条目。
(注:过滤器filter的相关语法详见LDAP filter语法补充说明)
相关补充
javax.naming.Name对象说明
在API中,我们常常见到对LDAP上下文条目有两种参数形式,一种是大家都熟悉的String参数,如: String baseDN = "ou=People,dc=jsoso ,dc=net";
另一种是使用javax.naming.Name类型的参数,那么Name类和String有什么区别呢?
简单的说,Name是对String类DN的封装,它把一个完整的DN字窜分解成了RDN的list。这个list的顺序刚好和String相反。就拿"ou=People,dc=jsoso ,dc=net"为例,Name中的RDN顺序是[0]=net,[1]=jsoso,[2]=People。这样做的好处是更方便对Name进行操作,比如取其前缀或者后缀。
SearchControls SCOPE补充说明
LDAP filter语法补充说明
filter的运算符
filter布尔运算符
搜索过滤器示例
你好,请问你的LDAP分页实现了吗?可以给我看看你实现的源代码吗?我刚接触这个,不知道怎么写。要是不愿意给源代码,就算了,不过还是谢谢了。我的QQ:573696448
目前为止,通过异常判断LDAP中的数据逻辑,是一种没有办法的办法,虽然这个不符合java的编程习惯,但LDAP毕竟不是为Java而设计的协议
Java6.0 API for LDAP概述
从JDK5.0开始,对LDAP协议的数据访问操作就被集成在javax的扩展API包中,并随同JDK一并发布,这一章节,我们主要介绍API包中的类信息。
javax.naming.directory 包的结构
常用API解析
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的常用部分,更多更详细的描述,请参考 Sun Java6.0 API DOC。
LDAP操作代码样例
在这个章节中,我们将结合LDAP操作的代码实例了解API使用。
初始化LDAP 目录服务上下文
该例子中,我们使用uid=linly,ou=People,dc=jsoso,dc=net这个账号,链接位于本机8389端口的LDAP服务器(ldap://localhost:8389),认证方式采用simple类型,即用户名/密码方式。
private static void initialContext() throws NamingException{ if(singleton == null){ singleton = new LDAPConnection(); /* * 在实际编码中,这些环境变量应尽可能通过配置文件读取 */ //LDAP服务地址 singleton.sLDAP_URL = "ldap://localhost:8389"; //管理员账号 singleton.sMANAGER_DN = "uid=linly,ou=People,dc=jsoso,dc=net"; //管理员密码 singleton.sMANAGER_PASSWORD = "coffee"; //认证类型 singleton.sAUTH_TYPE = "simple"; //JNDI Context工厂类 singleton.sCONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory"; singleton.envProps.setProperty(Context.INITIAL_CONTEXT_FACTORY, singleton.sCONTEXT_FACTORY); singleton.envProps.setProperty(Context.PROVIDER_URL, singleton.sLDAP_URL); singleton.envProps.setProperty(Context.SECURITY_AUTHENTICATION, singleton.sAUTH_TYPE); singleton.envProps.setProperty(Context.SECURITY_PRINCIPAL, singleton.sMANAGER_DN); singleton.envProps.setProperty(Context.SECURITY_CREDENTIALS, singleton.sMANAGER_PASSWORD); /* * 绑定ldap服务器 */ singleton.dirCtx = new InitialDirContext(singleton.envProps); } }
通过一个Hashtable或者Properties对象为LDAP的Context设置参数,而后初始化InitialDirContext,即可绑定LDAP服务。这相当于JDBC中获取数据库的Connection对象。
绑定/创建LDAP条目对象
用户可以使用bind方法创建新的LDAP条目,下面的代码创建一个DN:"ou=Employee , dc=jsoso ,dc=net"的OrganizationUnit类LDAP条目如下:
public boolean createOrganizationUnit(){ String ldapGroupDN = "ou=Employee , dc=jsoso ,dc=net"; try { /* * 查找是否已经存在指定的OU条目 * 如果存在,则打印OU条目的属性信息 * 如果不存在,则程序会抛出NamingException异常,进入异常处理 */ Attributes attrs = dirContext.getAttributes(ldapGroupDN); System.out.println("Find the group , attributes list :"); NamingEnumeration<String> nEnum = attrs.getIDs(); for( ; nEnum.hasMore() ; ){ String attrID = nEnum.next(); Attribute attr = (Attribute)attrs.get(attrID); System.out.println(attr.toString()); } return false; } catch (NamingException e) { /* * 没有找到对应的Group条目,新增Group条目 */ //创建objectclass属性 Attribute objclass = new BasicAttribute("objectclass"); objclass.add("top"); objclass.add("organizationalunit"); //创建cn属性 Attribute cn = new BasicAttribute("ou", "Employee"); //创建Attributes,并添加objectclass和cn属性 Attributes attrs = new BasicAttributes(); attrs.put(objclass); attrs.put(cn); //将属性绑定到新的条目上,创建该条目 try { dirContext.bind(ldapGroupDN, null, attrs); System.out.println("Group created successful"); return true; } catch (NamingException e1) { e1.printStackTrace(); } } return false; }
或者使用createSubcontext方法创建亦可,以下例子我们新增一个inetorgperson类的LDAP条目:
/** * 创建LDAP用户条目 * @param user * @return */ public boolean createUser(LDAPUser user){ if(user == null){ return false; } if(user.getUserID() == null || user.getUserID().length() == 0 || user.getFirstName() == null || user.getFirstName().length() == 0 || user.getLastName() == null || user.getLastName().length() == 0 || user.getCommomName() == null || user.getCommomName().length() == 0){ return false; } //判断用户条目是否已经存在 if(isUserexist(user.getDistinguishedName())){ return true; } /* * 新建条目属性集 */ Attributes attrs = new BasicAttributes(); setBasicAttribute(attrs , "objectclass" , "top,person,organizationalPerson,inetorgperson"); setBasicAttribute(attrs , "cn" , user.getCommomName()); setBasicAttribute(attrs , "givenname" , user.getFirstName()); setBasicAttribute(attrs , "sn" , user.getLastName()); setBasicAttribute(attrs , "uid" , user.getUserID()); setBasicAttribute(attrs , "userpassword" , user.getPassword()); //添加用户条目节点 try { dirContext.createSubcontext(user.getDistinguishedName(), attrs); System.out.println("Add User(" + user.getDistinguishedName() + ") ok."); return true; } catch (NamingException e) { e.printStackTrace(); } return false; }
获取条目属性
下面一段代码获取entryDN参数指定条目中的属性集合,并打印到控制台
/** * 获取一个指定的LDAP Entry * @param entryDN */ public void find(String entryDN){ try { Attributes attrs = dirContext.getAttributes(entryDN); if (attrs != null) { NamingEnumeration<String> nEnum = attrs.getIDs(); for( ; nEnum.hasMore() ; ){ String attrID = nEnum.next(); Attribute attr = (Attribute)attrs.get(attrID); System.out.println(attr.toString()); } System.out.println(); }else{ System.out.println("No found binding."); } }catch(NamingException ne) { ne.printStackTrace(); } }
修改条目属性
修改DN=user.getDistinguishedName()的条目中的cn、givenname、sn和userpassword四个属性值。
(注:参数DirContext.REPLACE_ATTRIBUTE有另外两个常量:DirContext.ADD_ATTRIBUTE;DirContext.REMOVE_ATTRIBUTE,分别表示新增属性和删除属性。)
/** * 修改用户信息 * @param user * @return * @throws Exception */ public boolean modifyUser(LDAPUser user) throws Exception { //用户对象为空 if (user == null) { throw new Exception("No user information!n"); } //检查uid String userDN = user.getDistinguishedName(); if (userDN == null && userDN.length() == 0) { throw new NamingException("No userDN you specify!n"); } //判断用户条目是否已经存在 if(!isUserexist(userDN)){ return false; } //设置属性 Attributes attrs = new BasicAttributes(); setBasicAttribute(attrs, "cn", user.getCommomName()); setBasicAttribute(attrs, "givenname", user.getFirstName()); setBasicAttribute(attrs, "sn", user.getLastName()); setBasicAttribute(attrs, "userpassword", user.getPassword()); //修改属性 try{ dirContext.modifyAttributes(user.getDistinguishedName(),DirContext.REPLACE_ATTRIBUTE, attrs); System.out.println("User(" + user.getDistinguishedName() + ") information modified.n"); return true; }catch(NamingException ne){ ne.printStackTrace(); } return false; }
删除条目
删除DN= userDN条目
/** * 删除用户 * @param userDN * @return */ public boolean deleteUser(String userDN) { if(!isUserexist(userDN)) { return true; } try { dirContext.destroySubcontext(userDN); System.out.println("User( " + userDN + ") deleted.n"); return true; } catch (NamingException e) { e.printStackTrace(); } return false; }
根据属性集搜索条目
根据属性集matchingAttributes中的匹配值,在上下文DN= "ou=People,dc=jsoso ,dc=net"中搜索它的所有子树中的匹配条目。
(注:SearchControls的SCOPE参数详见SearchControls SCOPE补充说明)
/** * 通过属性搜索LDAP范例 * @return */ public void searchByAttribute(Attributes matchingAttributes){ String baseDN = "ou=People,dc=jsoso ,dc=net"; SearchControls cons = new SearchControls(); cons.setSearchScope(SearchControls.SUBTREE_SCOPE); try { Name baseName = new LdapName(baseDN); NamingEnumeration<SearchResult> ne = dirContext.search(baseName, matchingAttributes); SearchResult entry = null; for(;ne.hasMore();){ entry = ne.next(); showEntry(entry); } } catch (NamingException e) { e.printStackTrace(); } }
根据过滤器搜索条目
根据过滤器条件,在上下文DN = "ou=People,dc=jsoso ,dc=net"中,搜索它的所有子树中的匹配条目。
(注:过滤器filter的相关语法详见LDAP filter语法补充说明)
/** * 通过过滤器搜索LDAP范例 * @return */ public void searchByFilter(String filter){ String baseDN = "ou=People,dc=jsoso ,dc=net"; SearchControls cons = new SearchControls(); cons.setSearchScope(SearchControls.SUBTREE_SCOPE); try { NamingEnumeration<SearchResult> ne = dirContext.search(baseDN, filter , cons); SearchResult entry = null; for(;ne.hasMore();){ entry = ne.next(); showEntry(entry); } } catch (NamingException e) { e.printStackTrace(); } }
相关补充
javax.naming.Name对象说明
在API中,我们常常见到对LDAP上下文条目有两种参数形式,一种是大家都熟悉的String参数,如: String baseDN = "ou=People,dc=jsoso ,dc=net";
另一种是使用javax.naming.Name类型的参数,那么Name类和String有什么区别呢?
简单的说,Name是对String类DN的封装,它把一个完整的DN字窜分解成了RDN的list。这个list的顺序刚好和String相反。就拿"ou=People,dc=jsoso ,dc=net"为例,Name中的RDN顺序是[0]=net,[1]=jsoso,[2]=People。这样做的好处是更方便对Name进行操作,比如取其前缀或者后缀。
SearchControls SCOPE补充说明
LDAP filter语法补充说明
filter的运算符
filter布尔运算符
搜索过滤器示例
- 下列过滤器将搜索包含一个或多个 manager 属性值的条目。这也称为存在搜索: manager=*
- 下列过滤器将搜索包含通用名 Ray Kultgen 的条目。这也称为等价搜索:cn=Ray Kultgen
- 下列过滤器返回所有不包含通用名 Ray Kultgen 的条目:(!(cn=Ray Kultgen))
- 下列过滤器返回的所有条目中都有包含子字符串 X.500 的说明属性:description=*X.500*
- 下列过滤器返回所有组织单元为 Marketing 且说明字段中不包含子字符串 X.500 的条目: (&(ou=Marketing)(!(description=*X.500*)))
- 下列过滤器返回所有组织单元为 Marketing 且 manager 为 Julie Fulmer 或 Cindy Zwaska 的条目: (&(ou=Marketing)(|(manager=cn=Julie Fulmer,ou=Marketing,dc=siroe,dc=com)(manager=cn=Cindy Zwaska,ou=Marketing,dc=siroe,dc=com)))
- 下列过滤器返回所有不代表人员的条目: (!(objectClass=person))
- 下列过滤器返回所有不代表人员且通用名近似于 printer3b 的条目:(&(!(objectClass=person))(cn~=printer3b))
评论
19 楼
qqgigas
2016-02-19
LZ,public boolean createUser(LDAPUser user)这个方法里的LDAPUser和setBasicAttribute都是你自定义的吧,对应的内容是啥,麻烦也发出来吧。
18 楼
jark_wang
2013-09-09
楼主怎么实现 winAD获取帐号呢
现在winAD 默认限制只能查询1000条数据,可是服务器已经6000多条数据,如何使用分页的形式获取这些数据,谢谢!!!
请教有会或源码的朋友发一下,万分感谢!!!
现在winAD 默认限制只能查询1000条数据,可是服务器已经6000多条数据,如何使用分页的形式获取这些数据,谢谢!!!
请教有会或源码的朋友发一下,万分感谢!!!
17 楼
javams
2011-12-07
yuan29346 写道
LDAP的分页程序怎么实现?
我是通过filter查询的,每次都返回10多万条,太慢了,用JNDI提供的分页程序,好象不太行。还有不cookie不知道怎么控制才好!很郁闷。
我是通过filter查询的,每次都返回10多万条,太慢了,用JNDI提供的分页程序,好象不太行。还有不cookie不知道怎么控制才好!很郁闷。
你好,请问你的LDAP分页实现了吗?可以给我看看你实现的源代码吗?我刚接触这个,不知道怎么写。要是不愿意给源代码,就算了,不过还是谢谢了。我的QQ:573696448
16 楼
xiaokelai
2011-06-27
好博文,学习了。
15 楼
axiseed
2009-08-17
博主好文,强顶之
14 楼
yuan29346
2008-10-05
LDAP的分页程序怎么实现?
我是通过filter查询的,每次都返回10多万条,太慢了,用JNDI提供的分页程序,好象不太行。还有不cookie不知道怎么控制才好!很郁闷。
我是通过filter查询的,每次都返回10多万条,太慢了,用JNDI提供的分页程序,好象不太行。还有不cookie不知道怎么控制才好!很郁闷。
13 楼
维管束
2008-09-09
博主,有没有给条目添加访问控制的源代码。还有就是在程序中给 LDAP 的schema添加objectclass和attriubte的解决方案,最好能够提供下具体的解决方案步骤。感激不尽啦
12 楼
qiu768
2008-08-16
哦,既然这样,那就没办法了。就只能按原先的写法了。其实也不影响什么,只是看老抛异常很不习惯。
11 楼
linliangyi2007
2008-08-16
引用
我这方法是能实现判断的功能的,就是当导入的用户已经存在的情况下就不会抛异常,当导入一个新的用户的时候,isUserExist方法就会抛javax.naming.NameNotFoundException:
我不知道该如何去避免这种情况
我不知道该如何去避免这种情况
目前为止,通过异常判断LDAP中的数据逻辑,是一种没有办法的办法,虽然这个不符合java的编程习惯,但LDAP毕竟不是为Java而设计的协议
10 楼
qiu768
2008-08-15
我这方法是能实现判断的功能的,就是当导入的用户已经存在的情况下就不会抛异常,当导入一个新的用户的时候,isUserExist方法就会抛javax.naming.NameNotFoundException:
我不知道该如何去避免这种情况
我不知道该如何去避免这种情况
9 楼
qiu768
2008-08-15
我的邮箱是qiu768@126.com QQ:675248602
8 楼
qiu768
2008-08-15
博主 想问你个问题,你代码中的 isUserexist()方法肯定是判断LDAP里是否存在导入的用户信息。我不知道你是实现这个方法的。我自己写了一个 public boolean isUserExist(String entryDN, DirContext ctx) {
boolean isExist = false;
try {
Attributes attrs = ctx.getAttributes(entryDN);
if (attrs != null) {
isExist = true;
}
} catch (NamingException ne) {
ne.printStackTrace();
}
return isExist;
}
这样写不行,在执行到Attributes attrs = ctx.getAttributes(entryDN);
这里的时候就会抛异常。不知道你是怎么实现的,能把你这个方法的代码公开一下吗?我项目下星期就要上交了,希望能帮帮我!!
boolean isExist = false;
try {
Attributes attrs = ctx.getAttributes(entryDN);
if (attrs != null) {
isExist = true;
}
} catch (NamingException ne) {
ne.printStackTrace();
}
return isExist;
}
这样写不行,在执行到Attributes attrs = ctx.getAttributes(entryDN);
这里的时候就会抛异常。不知道你是怎么实现的,能把你这个方法的代码公开一下吗?我项目下星期就要上交了,希望能帮帮我!!
7 楼
nxyntc
2008-08-13
你好,我在添加时总出现 53的错误,在网上找不到答案,请问你可以帮我解决下吗?
nxy_ntc@hotmail.com(没找到您的联系方式)
nxy_ntc@hotmail.com(没找到您的联系方式)
6 楼
kevindurant
2008-07-08
汗..这么好的帖子 竟然这么少人来顶..我狂顶了.小弟在弄个spring security2.0..英文水平不好可参考的文档太少....呵呵.不知道楼主有没有研究这方面的东西..
5 楼
qiu768
2008-06-11
非常感谢!这几天的工作刚好要用到LDAP,博主的这两篇文章对我来说正好是及时雨,谢谢!
4 楼
zlot
2008-05-06
恩, 不错。 顶你一下,也提出我的一些见解。
看的出来你使用的是 DS 的 API , 使用AM API 操作 DS 方法更简单,而且屏蔽了 DS 对用户的差异。
使用 AMIdentity ....AM* 系列 和 AMIdentityRepository 就差不多了。
不过前提是你是用 AM 作为你的访问管理中心
QQ 515608035 有空多交流
看的出来你使用的是 DS 的 API , 使用AM API 操作 DS 方法更简单,而且屏蔽了 DS 对用户的差异。
使用 AMIdentity ....AM* 系列 和 AMIdentityRepository 就差不多了。
不过前提是你是用 AM 作为你的访问管理中心
QQ 515608035 有空多交流
3 楼
linliangyi2007
2008-04-11
呵呵,因为LDAP用的人少啦,所以看得人也少!
感谢楼上的立顶啊。
感谢楼上的立顶啊。
2 楼
guojinde
2008-04-11
看完,再顶一个
1 楼
guojinde
2008-04-11
这么好的帖竟无人顶,我 来。。
发表评论
-
来自开源支持者的第一笔捐赠
2013-01-09 21:15 57812013年1月9号,一个平凡而又不平常的日子! IK中文分词 ... -
发布 IK Analyzer 2012 FF 版本
2012-10-23 17:50 25087首先感谢大家对IK分词器的关注。 最近一段时间正式公司事务最 ... -
发布 IK Analyzer 2012 版本
2012-03-08 11:23 36187新版本改进: 支持分词歧义处理 支持数量词合并 词典支持中英 ... -
CSDN发生严重用户账号泄密事件
2011-12-21 19:21 2566之前有在CSDN注册过的兄弟们,注意了。。。 如果你的邮箱, ... -
一个隐形的java int溢出
2011-08-30 09:44 7560故事的背景: 笔者最近在做一个类SNS的项目,其中 ... -
雷军 :互联网创业的葵花宝典
2011-05-04 10:35 3597博主评: 这片博客很短 ... -
Luci-mint站内搜索实测
2011-04-02 16:18 4144关于Luci-mint 服务器硬 ... -
发布 IK Analyzer 3.2.8 for Lucene3.X
2011-03-04 17:49 14259IK Analyzer 3.2.8版本修订 ... -
TIPS - XML CDATA中的非法字符处理
2011-02-17 15:03 3305XML解析过程中,常遇见CDATA中存在非法字符,尤其在火星文 ... -
对Cassandra的初体验
2010-10-13 17:58 9141作为“云计算”时代的架构设计人员而言,不懂K-V库会被 ... -
Spring + iBatis 的多库横向切分简易解决思路
2010-10-11 13:43 93611.引言 笔者最近在做一个互联网的“类SNS”应用,应用 ... -
发布 IK Analyzer 3.2.5 稳定版 for Lucene3.0
2010-09-08 14:43 5823新版本IKAnnlyzer3.2.8已发布! 地址: http ... -
关于Lucene3.0.1 QueryParser的一个错误
2010-05-21 21:33 2132表达式1: 引用 id:"1231231" ... -
发布 IK Analyzer 3.2.3 稳定版 for Lucene3.0
2010-05-15 14:13 6719IK Analyzer 3.2.3版本修订 在3.2.0版 ... -
windows平台上的nginx使用
2010-01-28 17:13 3407转载自:http://nginx.org/en/docs/wi ... -
发布IKAnnlyzer3.2.0稳定版 for Lucene3.0
2009-12-07 09:27 9582最新3.2.5版本已经推出,http://linliangyi ... -
在Tomcat下以JNDI方式发布JbossCache
2009-12-04 10:57 3833前言: 看过JbossCache的开发手册,发现在Jb ... -
Spring AOP小例子
2009-11-16 10:35 3406PS: 要注明一下,这个是转载滴,之前漏了说鸟,汗死 这里给 ... -
ActiveMQ 5.X 与 Tomcat 集成一(JNDI部署)
2009-11-10 15:15 5651原文地址:http://activemq.apache.org ... -
发布IKAnalyzer中文分词器V3.1.6GA
2009-11-08 23:10 11860IKAnalyzer3.2.0稳定版已经发布,支持Lucene ...
相关推荐
Sun Directory Server,也被称为Sun One Directory Server,是Sun Microsystems(现已被Oracle公司收购)开发的一款强大的 Lightweight Directory Access Protocol (LDAP) 服务器。LDAP是一种开放标准的目录服务协议...
SUN Directory Server是Sun Microsystems(现已被Oracle收购)开发的一款强大的 Lightweight Directory Access Protocol (LDAP) 目录服务器,主要用于管理和存储组织的各种网络资源信息,如用户账号、权限、配置数据...
3. 从协议衍化上阐述LDAP,它是“目录访问协议DAP——ISO X.500”的衍生,简化了DAP协议,提供了轻量级的基于TCP/IP协议的网络访问,降低了管理维护成本,但保持了强壮且易于扩充的信息框架。LDAP的应用程序可以很...
Sun ONE (Open Network Environment) Directory Server,是Sun Microsystems公司(现已被甲骨文公司收购)推出的一款企业级的目录服务软件。它是一个基于 Lightweight Directory Access Protocol (LDAP) 的目录服务...
《ldap详解——ibm tivoli directory server从入门到精通》以ibm tivoli directory server(tds)软件产品为基础,针对ldap目录服务进行了全面、系统的阐述和介绍。全书涵盖了ldap的原理、安装、配置、管理、设计、...
3. 确保在代码中正确地使用JNDI LDAP API,例如: ```java import javax.naming.*; import javax.naming.ldap.*; public class LdapExample { public static void main(String[] args) { try { // 创建初始上...
Sun One Directory Server 5.2 是一款由Sun Microsystems(后被Oracle公司收购)开发的企业级目录服务软件。这款产品在2000年代初期广泛应用于组织的网络基础设施中,用以管理和存储用户身份、权限和其他元数据。...
Sun Java System Directory Server 5.2 是一款由Sun Microsystems开发的企业级 Lightweight Directory Access Protocol (LDAP) 服务器。作为目录服务的核心组件,它被设计用于存储、管理和检索大量结构化数据,如...
Sun Directory Server 是一款基于 Lightweight Directory Access Protocol (LDAP) 的目录服务软件,由 Sun Microsystems 开发。在进行 Sun Directory Server 的安装教程中,有几个关键的知识点是必须了解的,这些...
DzzOffice 安装和升级插件说明(详细教程请在DzzOffice 笔记中查看): 下载并解压插件后,请将解压后的插件文件夹以"LDAP"命名的方式放置在网站的"dzz"目录下(若该目录下已存在同名文件夹,请先删除原文件夹后再...
LDAP学习笔记 LDAP,全称为轻量级目录访问协议,是一种用于访问和管理分布式目录服务的网络协议。它源于X.500标准,但在设计上更为轻便且可定制,支持TCP/IP通信,这对于互联网访问至关重要。目录服务主要用于快速...
Sun Directory Server_LDAP LDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet...
Sun Java System Directory,也称为Sun Directory Server或OpenDS,是一款由Sun Microsystems开发的高性能、可扩展的LDAP(轻量目录访问协议)服务器。它支持高可用性和大规模数据处理,被广泛应用于企业环境中作为...
配置IBM Tivoli Directory Server(ITDS)作为Cognos的LDAP认证源是实现企业级安全性和用户管理的重要步骤。这一过程不仅提升了系统的安全性,还促进了Cognos BI(Business Intelligence)与IBM Tivoli安全架构之间...
《深入理解Novell.Directory.Ldap.dll在C#中的应用》 Novell.Directory.Ldap.dll是C#编程中用于访问Directory(目录服务)或eDirectory(Novell的企业级目录服务)的重要组件,它提供了一组丰富的类和方法,使得...
在讨论DNS服务器的配置与部署时,会涉及到DNS信息存储的多种方式,其中一种方式是利用LDAP目录服务或SQL数据库。这种做法主要是为了增强DNS系统的健壮性和扩展性。LDAP目录服务是一种用于存储和检索信息的轻型目录...
ldap样例数据,可用来导入。
本文将详细介绍IBM WebSphere及Sun One Directory Server的安装过程,这两个组件在实现单点登录系统中扮演着重要角色。首先,我们先来看看Sun One Directory Server的安装步骤。 1. **SUN ONE Directory Server ...
3. **LDAP(Lightweight Directory Access Protocol)**:LDAP 是一种用于访问和管理分布式目录服务的标准协议。在企业环境中,LDAP 通常用于存储用户账户信息和权限,便于进行身份验证和授权。登录服务器可以通过 ...
Apache Directory Server 是一个基于 Java 语言的开源 LDAP 服务器,由 Apache 软件基金会开发和维护。该服务器提供了一个完整的目录解决方案,包括目录服务器、目录工具和其他相关组件。 目录服务器简介 Apache ...