LDAPユーザーの特定のユーザーとパスワードが正しいかどうかをテストします。JNDIによるLDAP認証
jndiが使用するライブラリであることを整理しました。
私はこの単純なクラスが見つかりました:私はそれは私がパラメータで遊んでいます動作するようにしようとしていますので、
package myldap;
import java.util.Hashtable;
import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
// boolean function to test user and pwd
public static boolean userVerify(String user, String password){
boolean userVerify = false;
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://192.168.48.10");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "CN=" + user + ",conn");
env.put(Context.SECURITY_CREDENTIALS, password);
try {
DirContext authContext = new InitialDirContext(env);
userVerify = true;
authContext.close();
} catch (AuthenticationException authEx) {
//("Authentication Exception!");
userVerify = false;
} catch (NamingException namEx) {
//("Something went wrong!");
userVerify = false;
}
return userVerify;
}
を。私は、関数に入れ 値iはAuthenticationException
を得る上記と
INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
PROVIDER_URL, "ldap://192.168.48.10");
SECURITY_AUTHENTICATION, "simple");
SECURITY_PRINCIPAL, "CN=" + user + ",conn");
SECURITY_CREDENTIALS, password);
あり、それは私が解決策にはあまり近くだと思われるので、私は、私はNamingException
取得物事を変更することで、達成できる最高の結果です。
特に私はSECURITY_PRINCIPAL
についてはわかりません。
経験を積んだ人は誰ですか?どの人が間違っているのかを正確に突き止める方法についてアドバイスできますか?もちろん、接続して例外を発生させたくないです。
返信いただきありがとうございます。 SECURITY_PRINCIPALは "CN = john、OU = ACMEユーザー、OU = OU ACME内部、DC = ACME、DC = acmesystems、DC = com"のようになりますか? "john @ acme"のようなユーザー名だけを渡す必要がある場合、どうすればいいですか? – LaBracca
私はそれに答えていると信じています。どのようなLDAPサーバーを使用していますか? – EJP