public void LDAP_connect() { Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, ldapProperties.getFactory()); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put("com.sun.jndi.ldap.connect.timeout","500"); // 管理员 env.put(Context.SECURITY_PRINCIPAL, ldapProperties.getUsername()); // 管理员密码 env.put(Context.SECURITY_CREDENTIALS, ldapProperties.getPassword()); List<String> urlList = Collections.synchronizedList(new ArrayList<>()); urlList.addAll(ldapProperties.getUrls()); Collections.shuffle(urlList); for (int i = 0; i < urlList.size(); i++) { try { env.put(Context.PROVIDER_URL, urlList.get(i) + ldapProperties.getBase()); ctx = new InitialLdapContext(env, connCtls); System.out.println( env.get(Context.PROVIDER_URL)+"连接成功" ); break; } catch (Exception e) { System.out.println(env.get(Context.PROVIDER_URL)+"连接出错"); } } }这段代码什么意思
时间: 2024-04-04 12:36:03 浏览: 65
这是一个 Java 方法,用于连接 LDAP(轻型目录访问协议)服务器。它首先创建一个 Hashtable 对象 env,其中包含连接所需的参数,如上下文工厂、身份验证方式、用户名和密码等。然后它会从配置文件中获取 LDAP 服务器的 URL 并随机打乱顺序。接下来,使用 for 循环尝试连接每个 URL,如果连接成功,则会创建一个 InitialLdapContext 对象并打印出连接成功的消息。如果连接失败,则会捕获异常并打印连接出错的消息。最后,方法返回一个已连接的 InitialLdapContext 对象。
相关问题
java 操作 ldap_JAVA操作LDAP总结
LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议,旨在提供对目录服务的快速访问。在Java中,可以通过使用JNDI(Java Naming and Directory Interface)API来操作LDAP。
下面是一些Java操作LDAP的常见步骤和示例代码:
1.创建连接对象
```
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://localhost:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=admin,dc=example,dc=com");
env.put(Context.SECURITY_CREDENTIALS, "password");
DirContext ctx = new InitialDirContext(env);
```
2.查询数据
```
String base = "ou=people,dc=example,dc=com";
String filter = "(objectclass=person)";
SearchControls sc = new SearchControls();
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<SearchResult> results = ctx.search(base, filter, sc);
while (results.hasMore()) {
SearchResult sr = (SearchResult) results.next();
// 处理查询结果
}
```
3.添加数据
```
Attributes attrs = new BasicAttributes();
attrs.put("cn", "John Smith");
attrs.put("sn", "Smith");
attrs.put("givenName", "John");
attrs.put("mail", "john.smith@example.com");
attrs.put("userPassword", "password");
ctx.createSubcontext("cn=John Smith,ou=people,dc=example,dc=com", attrs);
```
4.修改数据
```
ModificationItem[] mods = new ModificationItem[1];
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("mail", "new-email@example.com"));
ctx.modifyAttributes("cn=John Smith,ou=people,dc=example,dc=com", mods);
```
5.删除数据
```
ctx.destroySubcontext("cn=John Smith,ou=people,dc=example,dc=com");
```
这些是Java操作LDAP的一些基本步骤和示例代码,但实际应用中还需要考虑LDAP服务器的具体配置和授权等问题。
Oracle ldap 支持搜索sAMAccout=username 么
`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=*)"`。
阅读全文