java 无ldapBaseDn ldap查询同名用户 代码
时间: 2023-11-25 10:06:58 浏览: 122
JAVA中使用LDAP进行用户认证
5星 · 资源好评率100%
以下是使用 JNDI 进行 LDAP 查询的 Java 代码,它可以查询指定 Base DN 下的同名用户:
```java
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
public class LdapSearchExample {
public static void main(String[] args) {
// LDAP 认证信息
String ldapUrl = "ldap://ldap.example.com:389";
String ldapUserDn = "CN=ldapadmin,OU=Users,DC=example,DC=com";
String ldapPassword = "password";
// 查询条件
String baseDn = "OU=Users,DC=example,DC=com";
String filter = "(&(objectClass=user)(cn=username))";
// 搜索控制
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
// 初始化 LDAP 上下文
LdapContext ldapContext = null;
try {
ldapContext = new InitialLdapContext(getLdapEnv(ldapUrl, ldapUserDn, ldapPassword), null);
// 执行查询
NamingEnumeration<SearchResult> results = ldapContext.search(baseDn, filter, searchControls);
// 处理查询结果
while (results.hasMore()) {
SearchResult searchResult = results.next();
Attributes attributes = searchResult.getAttributes();
// 根据需要获取用户属性
String displayName = attributes.get("displayName").get().toString();
System.out.println("User: " + displayName);
}
} catch (NamingException e) {
e.printStackTrace();
} finally {
if (ldapContext != null) {
try {
ldapContext.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
}
}
private static Hashtable<String, String> getLdapEnv(String ldapUrl, String ldapUserDn, String ldapPassword) {
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapUrl);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, ldapUserDn);
env.put(Context.SECURITY_CREDENTIALS, ldapPassword);
return env;
}
}
```
需要注意的是,上述代码中的 `baseDn` 参数应该替换成你实际的 Base DN,`filter` 参数应该替换成你实际的查询条件,其中 `username` 是要查询的用户名。另外,该代码需要引入 `javax.naming.*` 和 `javax.naming.directory.*` 包。
阅读全文