通用名称,假设使用“John Smith”编写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,进行身份验证而不是他的全名。有什么想法吗?
答案 0 :(得分:2)
在我们的LDAP autenthication例程中,我们创建一个jndi
用户帐户,一旦应用程序使用jndi用户的可分辨名称建立连接,应用程序就可以在LDAP中对自身进行身份验证(例如:{{1然后(为树中的用户节点提供一个分支)它使用以下代码检查用户uid=jndi,ou=branch,dc=com,dc=your,dc=organization
是否在LDAP树中:
uid
这样称呼:
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");
不为空,则用户存在于树中,然后我们继续使用该DN(和用户密码)而不是jndi用户DN建立新的连接。
如果进行顺利,那么用户userDn
使用其凭据只使用他/她的ID登录,而不提供任何非用户友好的DN。
答案 1 :(得分:1)
我用:
env.put(Context.SECURITY_PRINCIPAL, username);
env.put(Context.SECURITY_CREDENTIALS, password);
适合我。