ldap查询同名用户
时间: 2023-07-06 13:23:25 浏览: 54
如果你要查询同名用户,可以使用LDAP搜索过滤器来进行查询。以下是一个例子:
假设你要查询名为"John Smith"的所有用户,你可以使用以下过滤器:
```
(&(objectClass=user)(cn=John Smith))
```
这将返回所有姓为"Smith",名为"John"的用户。
如果你要查询同名但不同姓的所有用户,可以使用以下过滤器:
```
(&(objectClass=user)(givenName=John)(sn=Smith))
```
这将返回所有名为"John",姓为"Smith"的用户。
相关问题
java ldap查询同名用户 代码
以下是Java中使用LDAP查询同名用户的代码示例:
```java
import javax.naming.*;
import javax.naming.directory.*;
public class LDAPSearch {
public static void main(String[] args) {
String searchFilter = "(&(objectClass=user)(cn=John Smith))"; // LDAP搜索过滤器
String[] requiredAttributes = {"cn", "mail", "telephoneNumber"}; // 查询返回的属性
// LDAP连接参数
String ldapUrl = "ldap://ldap.example.com:389";
String ldapBaseDn = "dc=example,dc=com";
String ldapUsername = "cn=admin,dc=example,dc=com";
String ldapPassword = "adminpassword";
// 创建LDAP连接
Hashtable<String, String> env = new Hashtable<>();
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, ldapUsername);
env.put(Context.SECURITY_CREDENTIALS, ldapPassword);
try {
// 连接LDAP服务器
DirContext ctx = new InitialDirContext(env);
// 执行搜索
NamingEnumeration<SearchResult> results = ctx.search(ldapBaseDn, searchFilter, getSimpleSearchControls(requiredAttributes));
// 处理搜索结果
while (results.hasMore()) {
SearchResult result = (SearchResult) results.next();
Attributes attrs = result.getAttributes();
Attribute attr = attrs.get("cn");
String cn = (String) attr.get();
attr = attrs.get("mail");
String mail = (String) attr.get();
attr = attrs.get("telephoneNumber");
String telephoneNumber = (String) attr.get();
System.out.println("cn: " + cn + ", mail: " + mail + ", telephoneNumber: " + telephoneNumber);
}
// 关闭LDAP连接
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
// 获取LDAP搜索控制器
private static SearchControls getSimpleSearchControls(String[] attributes) {
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
controls.setTimeLimit(30000);
controls.setReturningAttributes(attributes);
return controls;
}
}
```
请注意,你需要替换代码中的LDAP连接参数和搜索过滤器,以适应你的LDAP服务器和搜索需求。
java 无ldapBaseDn ldap查询同名用户 代码
以下是使用 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.*` 包。