0

一般名は、「ジョン・スミス」がDNの構成に使用されているとしましょうが、UIDを使用して完全なDNを構成することは可能ですか。

私は現在これを行っており、それは機能します。

Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, 
env.put(Context.PROVIDER_URL, "ldap://myDomain.com");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "CN=John Smith,OU=IT,OU=MyCompany,OU=Users,DC=myDomain,DC=com");
env.put(Context.SECURITY_CREDENTIALS, "myPassWrd");

UIDここで、認証にフルネームの代わりにJ.smithなどを使用したいと思います。何か案は?

4

2 に答える 2

2

LDAP認証ルーチンではjndi、アプリケーションがLDAPで自身を認証するために使用するユーザーアカウントを作成します。アプリケーションがjndiユーザーの識別名を使用して接続を確立すると(例: uid=jndi,ou=branch,dc=com,dc=your,dc=organization)、(ユーザーノードにブランチを提供します)ツリー)次のコードを使用して、ユーザーuidがLDAPツリーにいるかどうかを確認します。

public String findUserDnByBranchAndUid(String branchName, String uid) throws NamingException {
    SearchControls searchControls = new SearchControls();
    searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    searchControls.setCountLimit(1);

    NamingEnumeration<SearchResult> answer;
    answer = dirContext.search(branchName, String.format("(uid=%s)", uid), searchControls);

    if (answer.hasMoreElements()) {
        SearchResult searchResult = answer.nextElement();
        return searchResult.getNameInNamespace();
    } else {
        return null;
    }
}

このように呼び出す:

String userDn = findUserDnByBranchAndUid("ou=users,dc=com,dc=your,dc=organization", "jsmith");

空でない場合userDn、ユーザーはツリーに存在し、jndiユーザーDNの代わりにそのDN(およびユーザーパスワード)を使用して新しい接続の確立に進みます。

エブリシングがうまくいけば、ユーザーjsmithは、ユーザーフレンドリーではないDNを提供することなく、自分のIDだけでその資格情報を使用してログインします。

于 2013-01-24T19:37:07.860 に答える
1

私が使う:

 env.put(Context.SECURITY_PRINCIPAL, username);
 env.put(Context.SECURITY_CREDENTIALS, password); 

私のために働きます。

于 2013-01-24T18:35:47.930 に答える