2012. 11. 12. 19:32ㆍJava Programming
현재의 개발 환경에서는 LDAP 를 통한 Directory 정보들을 수집해야할 일이 상당히 많다.
여지껏 .NET 으로의 개발은 여러번 있어서 어렵지 않게 했지만.. Java 로 해야할 일이 생겨서 이리저리 API들을 확인하면서 작업해 보았다.
일단 핵심이 되는 API는 javax.naming 이라는 패키지, 이부분이 모든 LDAP 통신을 위한 API들이 있는 패키지 이므로 기억해 두는 것이 좋다.
핵심이 되는 몇몇 Class 들이 있는데, 그 중 4개 정도가 주된 것이니 이 또한 기억해두도록 하자.
javax.naming.directory.InitialDirContext
javax.naming.directory.SearchControls
javax.naming.directory.SearchResult
javax.naming.directory.Attribute
- javax.naming.directory.InitialDirContext
- 디렉토리 서비스의 Base 가 되는 클래스 이다. 좀 더 이해하기 쉽게 말하면, JDBC의 Connection 인터페이스와 같은 역할을 한다. LDAP 통신을 하기위한 Host 정보나 인증 절차를 위한 계정, 비밀번호와 같은 것들을 설정하여 해당 디렉토리 서버와의 연결을 만들어내는 역할을 한다.
- javax.naming.directory.SearchControls
- 생성된 Context 를 통해서 LDAP 경로 및 필터 문자열을 통해 개체 정보를 검색하는 역할을 한다.
- javax.naming.directory.SearchResult
- 검색된 결과 개체의 데이터 유형이다. 해당 클래스의 getAttributes() 메소드를 이용하여 해당 개체의 정보들을 추출해 낼 수 있다.
- javax.naming.directory.Attribute
- 이는 AD의 개체의 특정 항목 정보를 담고 있다.
구글링을 통해서 검색해 보면 얼마든지 Java 라는 언어로 LDAP 프로그래밍 하는 방법은 나와있지만 대부분이 샘플 예제를 덩그러니 가져다 놓은 케이스들이 많아서 실제 구현에는 그닥 도움이 안되는 부분이 있다. 그래서 개발 도중에 삽질을 했던 부분이 다소 있다. 이런 부분을 속 시원하게 긁어주는 편이 글을 보는 이로 하여금 더 도움이 되지 않을까 한다.
<LDAP 접속 정보 설정은 어떻게 하는가>
Hashtable<String, String> properties = new Hashtable<String, String>();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
properties.put(Context.PROVIDER_URL, path);
properties.put(Context.SECURITY_AUTHENTICATION, "simple");
properties.put(Context.SECURITY_PRINCIPAL, userId);
properties.put(Context.SECURITY_CREDENTIALS, passwd);