LDAPサーバに登録されたユーザオブジェクトをパスワードで認証するのに,JavaのJNDIを使って以下のように書きました。
Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://host/o=foo"); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "uid=bar,ou=people,o=foo"); env.put(Context.SECURITY_CREDENTIALS, "secret"); try { DirContext ctx = new InitialDirContext(env); // success } catch (AuthenticationException ex) { // authentication fail } catch (NamingException ex) { // another naming exception }
InitialDirContextの生成時にSECURITY_PRINCIPALをSECURITY_CREDENTIALSで認証して,それが失敗すればAuthenticationExceptionが出ます。この時注意するのは,SECURITY_PRINCIPALには,PROVIDER_URLのベースDN(ここでは,o=fooの部分)も含めて,フルパスで書く必要があるということです。uid=barだけを指定するのじゃダメで,オブジェクトが見つからないというエラーになります(はまりました)。