http://demo.initech.com/?document_srl=1241을 참조하여 전에 설치했던 OpenDS의 샘플
데이타를 가져오는 소스입니다.
샘플데이타에는 ou=People 에 유저 데이타가 들어있고, 이중 uid가 user.0인 데이타를 검색하여
그 유저의 cn값, mail값, uid값 을 출력해보자.
db로 치면 attribute가 컬럼에 해당하고, filter가 where조건에 해당한다.
package com.bumjin.ldap;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
public class LDAPSearch {
public LDAPSearch() {
}
// LDAP server에서 인증서 일련번호(serial)을 검색조건으로 하여 "attrIDs"에
// 정의된 LDAP attribute들을 출력하는 예제
public static void ldapSearchByUID(String uid)
{
Hashtable env = new Hashtable(5, 0.75f);
NamingEnumeration m_ne = null;
// 검색된 결과 entry중 아래의 attribute들을 출력할 것임
//String[] attrIDs = {"cn", "serial", "mail", "uid"};
String[] attrIDs = {"cn", "mail", "uid"};
//파라미터로 넘어온 인증서 일련번호를 가지고 LDAP filter를 조립
String filter = "(uid=" + uid + ")";
try
{
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
//LDAP 서버의 "프로토콜://IP:포트"를 설정
// 아래는 ldap 프로토콜을 사용하는 127.0.0.1 서버의 389포트로 접속하는 경우
env.put(Context.PROVIDER_URL, "ldap://127.0.0.1:389");
DirContext dirCtx = new InitialDirContext(env);
SearchControls constraints = new SearchControls();
//검색범위를 하위디렉토까지 검색(SUBTREE)
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
if (attrIDs != null)
constraints.setReturningAttributes(attrIDs);
//검색을 시작할 BASE DN을 설정하고, 검색
//m_ne = dirCtx.search("c=kr", filter, constraints);
m_ne = dirCtx.search("dc=example,dc=com", filter, constraints);
dirCtx.close();
} catch (Exception e) {
e.printStackTrace();
}
try{
SearchResult sr = null;
while(m_ne.hasMoreElements()){
//System.out.println(m_ne.nextElement());
sr = (SearchResult)m_ne.next();
//dn출력시 BASE DN은 제외하고 출력된다.
System.out.println(sr.getName()+","+"dc=example,dc=com");
for (int i=0; i< attrIDs.length; i++) { //attrIDs member count
System.out.println(i + ": " + attrIDs[i] + " : " +
(String)sr.getAttributes().get(attrIDs[i]).get());
}
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
ldapSearchByUID("user.0");
} //main
} //class
실행결과
uid=user.0,ou=People,dc=example,dc=com
0: cn : Aaccf Amar
1: mail : user.0@maildomain.net
2: uid : user.0
이 글과 관련있는 글을 자동검색한 결과입니다 [?]