Oracle ldap 支持搜索sAMAccout=username 么
时间: 2023-10-01 20:11:33 浏览: 175
`sAMAccountName`是Active Directory的属性,而不是Oracle LDAP的属性。在Oracle LDAP中,相应的属性是`uid`。
如果您想在Oracle LDAP中搜索`uid`为特定值的用户,可以使用以下代码:
```java
import java.util.Hashtable;
import javax.naming.*;
import javax.naming.directory.*;
public class OracleLDAPSearch {
public static void main(String[] args) {
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://[Oracle_Ldap_Server]:[port]/[base_dn]");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "[username]");
env.put(Context.SECURITY_CREDENTIALS, "[password]");
try {
// Create initial context
DirContext ctx = new InitialDirContext(env);
// Set search filter
String filter = "(uid=[username])";
// Set search controls
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
// Perform search
NamingEnumeration<SearchResult> results = ctx.search("[search_base_dn]", filter, controls);
// Process search results
while (results.hasMore()) {
SearchResult result = (SearchResult) results.next();
Attributes attrs = result.getAttributes();
System.out.println(attrs.get("uid"));
}
// Close the context when we're done
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
}
```
在上面的代码中,将`[Oracle_Ldap_Server]`替换为Oracle LDAP服务器的主机名或IP地址,将`[port]`替换为LDAP端口号,将`[base_dn]`替换为基本DN(例如“dc=example,dc=com”),将`[username]`替换为要登录的用户名,将`[password]`替换为用户的密码,将`[search_base_dn]`替换为要搜索的基本DN(例如“ou=users,dc=example,dc=com”)。
`SearchControls`对象的`setSearchScope`方法指定了搜索范围,`SUBTREE_SCOPE`表示递归搜索整个子树。`ctx.search`方法执行搜索操作,返回一个`NamingEnumeration`对象,其中包含了所有匹配的结果。`SearchResult`对象包含了匹配的属性,可以通过`getAttributes`方法获取属性集合。在上面的代码中,我们只打印了`uid`属性。
请注意,如果要搜索其他属性,可以将`filter`字符串中的`uid`替换为其他属性名即可。如果要搜索所有属性,可以将`filter`设置为`"(uid=*)"`。
阅读全文