Pozyskanie danych z LDAP.

0

Witam

Mam problem z pozyskaniem danych z LDAP:

 Hashtable env = new Hashtable();
 env.put("com.sun.jndi.ldap.connect.pool", "true");
 env.put("java.naming.security.principal", "[email protected]");
 env.put("java.naming.security.credentials", "xxxx");
 env.put("com.sun.jndi.ldap.connect.pool.authentication", "DIGEST-MD5");
 env.put(Context.PROVIDER_URL, "ldap://adres:389");
 env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
 DirContext ctx = new InitialDirContext(env);
 //-------------------------------------------------------------------------
 String base = "ou=People";

SearchControls sc = new SearchControls();
String[] attributeFilter = { "cn", "mail" };
sc.setReturningAttributes(attributeFilter);
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);

String filter = "(&(sn=W*)(l=Criteria*))";

NamingEnumeration results = ctx.search(base, filter, sc);
while (results.hasMore()) 
{
    

SearchResult sr = (SearchResult) results.next();
Attributes attrs = sr.getAttributes();

}

Łączy się bez problemu, jednak nie moge wywołac metody getAttributes(); aby pozyskac dane użytkowników z LDAP Zwyczajnie jej brakuje ;/ (Cannot find symbol). Nie wiem dlaczego. Pracuje pierwszy raz z LDAP sugerując się dokumentacja odszukaną w necie. Nie wiem co jest grane ;/

0

Próbowałeś podać pełen base?

[code]
String base = "ou=People,dc=domena,dc=local";
[/code]

0

Tak, nie pomogł. Bez zmiany.

0
LEONI napisał(a):

Tak, nie pomogł. Bez zmiany.

Mój błąd. Nie dotycztałem :D

Która wersja Javy?
Z jakiego pakietu importujesz klasę SearchResults?

0

JDK 6, importowane pakiety to:

import javax.naming.directory.*;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;

Ale wywala mi nieuzywany pakiet: import javax.naming.directory.SearchResult; chociaż chce wywołać metode tak jak wcześniej pisałem. Nie wiem co jest grane.

0

Korzystając z okazji, że mam Ldapa pod ręką sprawdziłem czy działa. Plik LdapTest.java

[code]
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;

public class LdapTest {

Hashtable<String,String> env = new Hashtable<String,String>();

void initLdap() throws Exception {
	env.put("com.sun.jndi.ldap.connect.pool", "true");
	env.put("java.naming.security.principal", "cn=admin,dc=moj_host,dc=moja_domena");
	env.put("java.naming.security.credentials", "haselko");
	env.put("com.sun.jndi.ldap.connect.pool.authentication", "DIGEST-MD5");
	env.put(Context.PROVIDER_URL, "ldap://localhost:389");
	env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
	DirContext ctx = new InitialDirContext(env);
	//-------------------------------------------------------------------------
	String base = "ou=People,dc=moj_host,dc=moja_domena";

	SearchControls sc = new SearchControls();
	String[] attributeFilter = { "uid", "mail","cn" };
	sc.setReturningAttributes(attributeFilter);
	sc.setSearchScope(SearchControls.SUBTREE_SCOPE);

	//String filter = "(&(sn=*)(l=Criteria*))";
	String filter = "(uid=*)";

	System.out.println("Searching....");
	NamingEnumeration results = ctx.search(base, filter, sc);
	while (results.hasMore()) 
	{
		SearchResult sr = (SearchResult) results.next();
		Attributes attrs = sr.getAttributes();
		System.out.println(attrs.get("cn"));
		System.out.println(attrs.get("uid"));
		System.out.println("==============================");
	}
	
	System.out.println("Closing context...");
	ctx.close();
}

public static void main(String args[]) {
	LdapTest app = new LdapTest();
	
	try {
		app.initLdap();
	} catch (Exception e) {
		System.out.println("ERROR : " + e.getMessage());
	}
}

}
[/code]

i kompilacja z cmd line:

[code]
set PATH="c:\Program Files\java\jdk1.6.0_27\bin"
javac LdapTest.java
java LdapTest
[/code]

W ten sposób wiem, że kompilacja i uruchomienie w oparciu o JDK 1.6 śmigają :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1