使用 JNDI 从 LDAP 服务器搜索(选择)任何数据
searching(selecting) any data from LDAP server using JNDI
我想select(搜索)来自我的 LDAP 服务器的任何类型的数据。
我有一个连接,但我不知道如何检索任何数据。
任何人都可以给小费,以便我可以看到诸如数据之类的东西吗?
问题:
当我运行以下代码时,我得到:
Exception in thread "main" java.lang.ClassCastException: com.sun.jndi.ldap.LdapCtx cannot be cast to javax.activation.DataSource`
我尝试了什么?
DataSource 有两个导入:
- 1) javax.sql
- 2) javax.activation
我更改了不同的导入但没有用。
我的另一个问题是“这两个导入是否相同?”
源代码:
public class LDAPJndi {
//JNDI API를 사용하여 서버와 연결 (Connecting to LDAP server using JNDI)
public static DirContext connectJndi() throws NamingException {
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://192.168.0.60:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=govmanager");
env.put(Context.SECURITY_CREDENTIALS, "GOVmoi!manager");
DirContext ctx = new InitialDirContext(env);
return ctx;
}
public static void lookupJndi() throws NamingException {
// a method for looking up any data
DirContext ctx = connectJndi();
Object o = ctx.lookup("c=kr");
System.out.println(o);
//above didn't work, so tried the bottom
DataSource dataSource = (DataSource) ctx.lookup("c=kr"); //c=kr is BaseDN
System.out.println(dataSource);
}
}
我解决了如下问题。我刚刚添加了许多评论来进行实验。它们可能会使某些人感到困惑,因此您可以随意删除它们。而且我认为 Eclipse 推荐的导入在这种情况下是一样的。希望对您有所帮助!
public static DirContext connectJndi() throws NamingException {
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://192.168.0.60:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "your id");
env.put(Context.SECURITY_CREDENTIALS, "your password");
//DirContext ctx = new InitialDirContext(env);
LdapContext ctx = new InitialLdapContext(env,null);
return ctx;
}
public static void lookupJndi() throws NamingException {
//DirContext ctx = connectJndi();
LdapContext ctx = (LdapContext) connectJndi();
SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
//ctls.setReturningAttributes(new String[] {"cn"});
//String searchFilter=String.format("(cn=%s)", "cn" );
String searchFilter="(objectClass=*)";
//String searchFilter="(o=*)";
NamingEnumeration<javax.naming.directory.SearchResult> results
= ctx.search("c=kr", searchFilter,ctls);
while(results.hasMoreElements()){
javax.naming.directory.SearchResult sr = results.next();
Attributes attrs = sr.getAttributes();
//System.out.println(sr);
System.out.println(attrs);
}
} // method
我想select(搜索)来自我的 LDAP 服务器的任何类型的数据。 我有一个连接,但我不知道如何检索任何数据。 任何人都可以给小费,以便我可以看到诸如数据之类的东西吗?
问题:
当我运行以下代码时,我得到:
Exception in thread "main" java.lang.ClassCastException: com.sun.jndi.ldap.LdapCtx cannot be cast to javax.activation.DataSource`
我尝试了什么?
DataSource 有两个导入:
- 1) javax.sql
- 2) javax.activation
我更改了不同的导入但没有用。
我的另一个问题是“这两个导入是否相同?”
源代码:
public class LDAPJndi {
//JNDI API를 사용하여 서버와 연결 (Connecting to LDAP server using JNDI)
public static DirContext connectJndi() throws NamingException {
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://192.168.0.60:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=govmanager");
env.put(Context.SECURITY_CREDENTIALS, "GOVmoi!manager");
DirContext ctx = new InitialDirContext(env);
return ctx;
}
public static void lookupJndi() throws NamingException {
// a method for looking up any data
DirContext ctx = connectJndi();
Object o = ctx.lookup("c=kr");
System.out.println(o);
//above didn't work, so tried the bottom
DataSource dataSource = (DataSource) ctx.lookup("c=kr"); //c=kr is BaseDN
System.out.println(dataSource);
}
}
我解决了如下问题。我刚刚添加了许多评论来进行实验。它们可能会使某些人感到困惑,因此您可以随意删除它们。而且我认为 Eclipse 推荐的导入在这种情况下是一样的。希望对您有所帮助!
public static DirContext connectJndi() throws NamingException {
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://192.168.0.60:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "your id");
env.put(Context.SECURITY_CREDENTIALS, "your password");
//DirContext ctx = new InitialDirContext(env);
LdapContext ctx = new InitialLdapContext(env,null);
return ctx;
}
public static void lookupJndi() throws NamingException {
//DirContext ctx = connectJndi();
LdapContext ctx = (LdapContext) connectJndi();
SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
//ctls.setReturningAttributes(new String[] {"cn"});
//String searchFilter=String.format("(cn=%s)", "cn" );
String searchFilter="(objectClass=*)";
//String searchFilter="(o=*)";
NamingEnumeration<javax.naming.directory.SearchResult> results
= ctx.search("c=kr", searchFilter,ctls);
while(results.hasMoreElements()){
javax.naming.directory.SearchResult sr = results.next();
Attributes attrs = sr.getAttributes();
//System.out.println(sr);
System.out.println(attrs);
}
} // method