2013-09-09 3 views
2

Я пытаюсь войти в систему с пользователем в ApacheDS через Java.Как войти в апаши с пользователем, не являющимся администратором

Это уже детали моего пользователя, как экспортируются в LDIF:

dn: uid=carlspring,ou=users,ou=system 
objectClass: top 
objectClass: inetOrgPerson 
objectClass: person 
objectClass: organizationalPerson 
cn: Martin Todorov 
sn: Todorov 
uid: carlspring 
userPassword:: e1NTSEF9bC9LRk45RllHdW5aVGdLcUtScmNTYk80RXRLMmJvbTEvM2NOYnc9PQ== 

Это код, у меня есть:

// Set up environment for creating initial context 
    Hashtable env = new Hashtable(11); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
    env.put(Context.PROVIDER_URL, "ldap://localhost:10389/ou=users,ou=system"); 
    env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    env.put(Context.SECURITY_PRINCIPAL, "uid=carlspring,ou=users,ou=system"); 
    env.put(Context.SECURITY_CREDENTIALS, "password"); 

    try 
    { 
     // Create initial context 
     DirContext ctx = new InitialDirContext(env); 

     System.out.println(ctx.lookup("ou=users")); 
     System.out.println("Logged in."); 

     // do something useful with ctx 

     // Close the context when we're done 
     ctx.close(); 
    } 
    catch (NamingException e) 
    { 
     e.printStackTrace(); 
    } 

Я получаю следующее исключение:

javax.naming.NameNotFoundException: [LDAP: error code 32 - NO_SUCH_OBJECT: failed for MessageType : SEARCH_REQUEST 
Message ID : 2 
    SearchRequest 
     baseDn : 'ou=users,ou=users,ou=system' 
     filter : '(objectClass=*)' 
     scope : base object 
     typesOnly : false 
     Size Limit : no limit 
     Time Limit : no limit 
     Deref Aliases : deref Always 
     attributes : 
[email protected]594470 ManageDsaITImpl Control 
     Type OID : '2.16.840.1.113730.3.4.2' 
     Criticality : 'false' 
' 
: ERR_648 Invalid search base ou=users,ou=users,ou=system]; remaining name 'ou=users' 

Из того, что я понимаю, похоже, что он не подключается должным образом. Я пробовал войти в систему через Apache Directory Studio (с uid=carlspring,ou=users,ou=system), и это отлично работает. Я также могу войти с пользователем администратора, как это:

env.put(Context.PROVIDER_URL, "ldap://localhost:10389/ou=system"); 
    env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system"); 
    env.put(Context.SECURITY_CREDENTIALS, "secret"); 

Может кто-нибудь пожалуйста, скажите мне, что я делаю не так и почему это не вход? Кажется, я не могу понять это. Спасибо заранее!

ответ

2

Похоже, что вы предоставляете базовое DN в своем Provider_URL, которое уже указывает ветку «ou = users» вашего дерева каталогов. Попробуйте изменить его на:

ldap: // localhost: 10389/ou = system