gpt4 book ai didi

java - DN - Java JDNI LDAP - 公用名与用户 ID

转载 作者:行者123 更新时间:2023-12-02 00:02:42 24 4
gpt4 key购买 nike

通用名称,假设使用“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)而不是他的全名进行身份验证。有什么想法吗?

最佳答案

在我们的 LDAP 身份验证例程中,我们创建一个 jndi 用户帐户,一旦应用程序使用 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 不为空,则该用户存在于树中,然后我们继续使用该 DN(和用户密码)而不是 jndi 用户 DN 建立新连接。

如果一切顺利,则用户 jsmith 将仅使用他/她的 ID 登录,而无需提供任何用户不友好的 DN。

关于java - DN - Java JDNI LDAP - 公用名与用户 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14506928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com