gpt4 book ai didi

java - 使用 Java 建立 LDAP 连接

转载 作者:行者123 更新时间:2023-12-02 03:13:33 26 4
gpt4 key购买 nike

我正在尝试使用一个返回 LdapContext 并接受用户名、密码、域名和服务器参数的函数在 Java 中建立 LDAP 连接。不清楚这些参数应该是什么样子。

我正在尝试连接到此只读 LDAP 测试服务器。 http://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/

我使用的 getConnection 方法派生 self 在此处找到的 Active Directory 类。 http://www.javaxt.com/wiki/Tutorials/Windows/How_to_Authenticate_Users_with_Active_Directory

目前,我正在尝试 getConnection("tesla", "password", "cn=read-only-admin,dc=example,dc=com", "ldap.forumsys.com:389"),这是不工作。我尝试过切换域和服务器,并尝试过“read-only-admin.example.com”而不是“cn=...”。

获取连接函数

public static LdapContext getConnection(String username, String password, String domainName, String serverName) throws NamingException {

if (domainName==null){
try{
String fqdn = java.net.InetAddress.getLocalHost().getCanonicalHostName();
if (fqdn.split("\\.").length>1) domainName = fqdn.substring(fqdn.indexOf(".")+1);
}
catch(java.net.UnknownHostException e){}
}

//System.out.println("Authenticating " + username + "@" + domainName + " through " + serverName);

if (password!=null){
password = password.trim();
if (password.length()==0) password = null;
}

//bind by using the specified username/password
Hashtable props = new Hashtable();
String principalName = username + "@" + domainName;
props.put(Context.SECURITY_PRINCIPAL, principalName);
if (password!=null) props.put(Context.SECURITY_CREDENTIALS, password);


String ldapURL = "ldap://" + ((serverName==null)? domainName : serverName + "." + domainName) + '/';
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
props.put(Context.PROVIDER_URL, ldapURL);
try{
return new InitialLdapContext(props, null);
}
catch(javax.naming.CommunicationException e){
throw new NamingException("Failed to connect to " + domainName + ((serverName==null)? "" : " through " + serverName));
}
catch(NamingException e){
throw new NamingException("Failed to authenticate " + username + "@" + domainName + ((serverName==null)? "" : " through " + serverName));
}
}

我尝试连接

try{
LdapContext ctx = ActiveDirectory.getConnection("tesla", "password", "cn=read-only-admin,dc=example,dc=com", "ldap.forumsys.com:389");
ctx.close();
}
catch(Exception e){
//Failed to authenticate user!
}

它捕获异常“javax.naming.CommunicationException”。

最佳答案

问题在于您尝试使用非标准用户名进行身份验证(适用于 AD,但不适用于 OpenLDAP)。

String principalName = username + "@" + domainName;
props.put(Context.SECURITY_PRINCIPAL, principalName);

使用 OpenLDAP 并如教程中所示,principalName 应为 uid=tesla,dc=example,dc=com

关于java - 使用 Java 建立 LDAP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56977548/

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