gpt4 book ai didi

java - LDAP:错误代码 49 - 简单绑定(bind)失败:NT_STATUS_LOGON_FAILURE

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:39 26 4
gpt4 key购买 nike

我正在尝试对用户进行身份验证,但它抛出 Exception。可能是配置有问题。

public class LdapApplication {
private static final String INITIAL_CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
private static final String SECURITY_AUTHENTICATION ="simple";
private static final String NAMED_CONTEXT = "CN=Users";
private static final String SAM_ACCOUNT_NAME = "sAMAccountName=";

public static void main(String[] args) {

Hashtable env = new Hashtable();

env.put(Context.INITIAL_CONTEXT_FACTORY,INITIAL_CONTEXT_FACTORY);
env.put(Context.PROVIDER_URL, "ldap://ip:portNo/dc=organisation,dc=in");
env.put(Context.SECURITY_AUTHENTICATION, SECURITY_AUTHENTICATION);
env.put(Context.SECURITY_PRINCIPAL, "cn=userName,cn=Users");
env.put(Context.SECURITY_CREDENTIALS, "password" );
DirContext context = null;

NamingEnumeration namingEnumeration = null;
try {
context = new InitialDirContext(env);

namingEnumeration = context.search(NAMED_CONTEXT, SAM_ACCOUNT_NAME+ userName, null);
while (namingEnumeration.hasMore()) {
SearchResult searchResult = (SearchResult) namingEnumeration.next();
Attributes attributes = searchResult.getAttributes();

System.out.println(" Person Common Name = " + attributes.get("cn"));
System.out.println(" Person Display Name = " + attributes.get("displayName"));

}catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();

}
}
} catch (Throwable e) {
e.printStackTrace();
} finally {
if (namingEnumeration != null) {
try {
namingEnumeration.close();
} catch (Exception e) {
}
}
if (context != null) {
try {
context.close();
} catch (Exception e) {
}
}
}

}

但如果我提到 Context.SECURITY_PRINCIPAL 作为 "organisation\\userName" 而不是 "cn=userName,cn=Users" 它工作得很好。请提出一个可能的解决方案,因为我的要求是使用 cn 或 dc 给 SECURITY_PRINCIPAL 一些东西。

最佳答案

您使用的是无效的相对可分辨名称。

更改代码以使用

env.put(Context.SECURITY_PRINCIPAL, "cn=userName,cn=Users,dc=organisation,dc=in");

并将您的搜索上下文更改为:

private static final String NAMED_CONTEXT = "CN=Users,dc=organisation,dc=in";

在 LDAP 中始终使用完整的可分辨名称。

关于java - LDAP:错误代码 49 - 简单绑定(bind)失败:NT_STATUS_LOGON_FAILURE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22383624/

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