Java/JNDI/LDAP
概要
JNDI(Java Naming and Directory Interface)とは
ネーミングサービス、ディレクトリサービスをJavaから扱うためのインタフェース。
LDAP
LDAP(Lightweight Directory Access Protocol)は、ディレクトリサービスに接続するためのプロトコル。
ディレクトリサービスは、情報をWindowsのツリーのようなモデルで格納しておくためのデータベース。
実験環境
-os:Windows XP
-jdk:1.4
-ldap:OpenLDAP
-web application server:Tomcat5.5
-ldap server:CentOS5
いろいろ書いたけれど、環境はなんでも同じ。
つなぎかた
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchResult;
public class LDAPSearch {
public String searchMailAddress() throws Exception{
Hashtable env = new Hashtable();
// ファクトリクラス
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
// URL
env.put(Context.PROVIDER_URL, "ldap://172.100.100.2:389/dc=634labs,dc=com");
// ルートユーザーID
env.put(Context.SECURITY_PRINCIPAL, "dc=634labs,dc=com");
// ルートユーザーパスワード
env.put(Context.SECURITY_CREDENTIALS, "secret");
// 上記の情報からコンテキストを生成
DirContext context = null;
NamingEnumeration entries = null;
try {
context = new InitialDirContext(env);
// エントリーの検索
entries = context.search(
"ou=sales", // 対象DN
"(&(uid={0})(userPassword={1}))", // 検索条件(指定方法はldapsearchと同一)
new Object[] { "tarou", "tarou_secret" }, // 検索フィルタ用パラメータ
null);
// 属性の取得
while (entries.hasMore()) {
SearchResult entry = (SearchResult) entries.next();
Attributes attrs = entry.getAttributes();
Attribute mailaddressAttribute = attrs.get("mailaddress");
String mailAddress = (String) mailaddressAttribute.get(0);
return mailAddress;
}
return null;
} catch (NamingException e) {
return null;
} finally {
try {
context.close();
entries.close();
} catch (Exception e) {
}
}
}
}

