4
5
6
九、 LDAP应用场景
使用JNDI操作目录服务
1. 准备连接目录服务器的相应配置文件(以ApacheDS为例)
apacheds.properties
java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
java.naming.provider.url=ldap://localhost:10389/dc=example,dc=com java.naming.security.authentication=simple
java.naming.security.principal=uid=liujz,dc=example,dc=com java.naming.security.credentials=123456
2. 创建测试类
public class LDAPTest{
private static DirContext ctx =null; private Properties ldapProps ;
public LDAPTest(Properties ldapProp){ This. ldapProp = ldapProp; }
public DirContext getDirContext(){ If(ctx=null){
ctx = new InitialDirContext(ldapProps); }
return ctx ;
}
//从LDAP服务器中查询符合条件的Entry
public void queryEntry(){
SearchControls sc = new SearchControls();
//用于设置查询范围 //有三种查询范围
SUBTREE_SCOPE:表示在以指定对象为根的子树中查找,可以返回多个元素 ONLEVEL_SCOPE:表示指定对象极其直接子实体 OBJECT_SCOPE:表示返回指定对象。
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
//该方法有单个参数,第一个参数是DN是一种相对的,因为根据配置文件,我们已经连接到根DN为dc=example,dc=com的目录树上,所以一下方法查询的Entry的DN为 ou=Account,dc=example,dc=com。第二个参数是过滤器,相当于SQL中的where子句。第三个参数为查询控制
String dn = “ou=Account”;
String filter = “ou=Account”;
NamingEnumeration result = getDirContext().search(dn,filter,sc);
While(result.hasMore()){
SearchResult entry = (SearchResult)result.next(); Attributes attrs = entry.getAttributes(); Attribute attr = attrs.get(“ou”); System.out.println(“ou=”+attr.get()); } }
//向LDAP服务器中添加Entry
Public void addEntry(){
//在ou=account,dc=example,dc=com节点下添加一个子节点。其RDN为
cn=liujianzhong Attributes attrs = new BasicAttributes(); attrs.put(“cn”,”liujianzhong”); attrs.put(“sn”,”liu”);
attrs.put(“userpassword”,”123456”);
BasicAttribute objectClassSet = new BasicAtrribute(“objectclass”);
objectClassSet.add(“top”): objectClassSet.add(“person”);
objectClassSet.add(“organizationalPerson”); objectClassSet.add(“inetOrgPerson”); attrs.put(objectClassSet);
ctx.createSubContext(“cn=liujianzhong,ou=Account”,attrs); }
//删除LDAP目录服务器中指定的Entry,如果该节点为叶子节点则直接删除,否则要先得到该节点下的所有叶子节点,然后从最底层的叶子节点删除,直到删除所有叶子节点为止
Public void delEntry(){
//删除叶子节点
String DN = “cn=liujianzhong,ou=Account” ; getDirContext().destroySubcontext(DN); //删除非叶子节点
String DN = “ou=Account,dc=example,dc=com” ; }
//删除非叶子节点
Public void delDN(String dn,DirContext ctx){ String root =\;
SearchControls sc = new SearchControls(); String filter = \;
sc.setSearchScope(SearchControls.ONELEVEL_SCOPE); NamingEnumeration results = ctx.search(dn, filter, sc); while(results.hasMore()){
SearchResult entry = (SearchResult)results.nextElement(); String name = entry.getNameInNamespace(); int rin = name.length()-root.length()-1; String rdn = name.substring(0, rin); delDn(rdn,ctx); }
ctx.destroySubcontext(dn);
}
//修改LDAP服务器中Entry的属性
public void modifyEntry(String dn,DirContext ctx) throws NamingException BasicAttribute attr = new BasicAttribute(\); attr.add(\);
//修改属性
ModificationItem[] mods = new ModificationItem[1];
mods[0] = new ModificationItem(LdapContext.REPLACE_ATTRIBUTE,attr); ctx.modifyAttributes(dn, mods);
//添加属性
BasicAttribute psw = new BasicAttribute(“userPassword”); Psw.add(“123456”);
ModificationItem[] add=new ModificationItem[1];
{ Add[0] = new ModificationItem(LdapContext.ADD_ATTRIBUTE,psw); ctx.modifyAttributes(dn, add);
//删除属性
BasicAttribute psw1= new BasicAttribute(“userPassword”); ModificationItem[] rem=new ModificationItem[1];
Rem[0] = new ModificationItem(LdapContext.ADD_ATTRIBUTE,psw1); ctx.modifyAttributes(dn, rem); }
} 3. 十、
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库LDAP使用手册(5)在线全文阅读。
相关推荐: