search - Java calling Active Directory using Apache Directory's LDAP API -
search - Java calling Active Directory using Apache Directory's LDAP API -
i'm trying connect active directory activiti, using apache directory's ldap api. think i've managed authenticate user, subsequent queries users finds nothing.
here's java code:
package com.abc.activiti.ldap; import org.activiti.engine.activitiexception; import org.activiti.engine.identity.user; import org.activiti.engine.impl.page; import org.activiti.engine.impl.userqueryimpl; import org.activiti.engine.impl.persistence.entity.userentity; import org.activiti.engine.impl.persistence.entity.usermanager; import org.apache.directory.ldap.client.api.ldapconnection; import org.apache.directory.ldap.client.api.exception.ldapexception; import org.apache.directory.ldap.client.api.message.bindresponse; import org.apache.directory.ldap.client.api.message.searchresponse; import org.apache.directory.ldap.client.api.message.searchresultentry; import org.apache.directory.shared.ldap.cursor.cursor; import org.apache.directory.shared.ldap.entry.entryattribute; import org.apache.directory.shared.ldap.filter.searchscope; import org.apache.directory.shared.ldap.message.resultcodeenum; import org.apache.mina.core.session.iosession; import org.slf4j.loggerfactory; import org.slf4j.logger; import java.io.ioexception; import java.util.arraylist; import java.util.list; public class ldapusermanager extends usermanager { private final static logger logger = loggerfactory.getlogger(ldapusermanager.class); private ldapconnectionparams ldapconnectionparams; public ldapusermanager(ldapconnectionparams ldapconnectionparams) { this.ldapconnectionparams = ldapconnectionparams; } public boolean checkpassword(string userid, string password) { boolean result; ldapconnection connection; string userdn = ldapconnectionparams.getuserprefix() + "=" + userid + "," + ldapconnectionparams.getusergroup(); logger.debug("checking password, using connection string: '" + userdn + "'"); seek { connection = openconnection(); bindresponse bindresponse = connection.bind(userdn, password); result = bindresponse.getldapresult().getresultcode() == resultcodeenum.success; } grab (ldapexception e) { throw new activitiexception("ldap exception while binding", e); } grab (ioexception e) { throw new activitiexception("io exception while binding", e); } // todo: move clause above closeconnection(connection); homecoming result; } public list<user> finduserbyquerycriteria(object o, page page) { list<user> result = new arraylist<user>(); userqueryimpl userquery = (userqueryimpl)o; stringbuilder querystring = new stringbuilder(); querystring.append("(").append(ldapconnectionparams.getuserprefix()).append("=") .append(userquery.getid()).append(")"); logger.debug("looking users: '" + querystring + "'"); ldapconnection connection; seek { connection = openconnection(); cursor<searchresponse> responsecursor = connection.search( ldapconnectionparams.getusergroup(), querystring.tostring(), searchscope.onelevel, "cn", "samaccountname", "sn"); logger.debug("got cursor: " + responsecursor); (searchresponse response : responsecursor) { logger.debug("it's rsponse: " + response); } int maxusers = 10; while (responsecursor.next() && maxusers-- > 0) { user user = new userentity(); searchresultentry searchresponse = (searchresultentry)responsecursor.get(); logger.debug("got item: " + searchresponse); result.add(user); } responsecursor.close(); } grab (ldapexception e) { throw new activitiexception("while searching user in ldap", e); } grab (exception e) { throw new activitiexception("while searching user in ldap", e); } // todo: move clause above closeconnection(connection); logger.debug("returning users: " + result); homecoming result; } private void closeconnection(ldapconnection connection) { seek { connection.unbind(); } grab (exception e) { e.printstacktrace(); } seek { connection.close(); } grab (ioexception e) { e.printstacktrace(); } } private ldapconnection openconnection() throws ldapexception, ioexception { ldapconnection connection = new ldapconnection( ldapconnectionparams.getldapserver(), ldapconnectionparams.getldapport()) { public void exceptioncaught(iosession iosession, throwable throwable) throws exception { logger.error("exception thrown in " + iosession, throwable); } }; connection.connect(); homecoming connection; } }
i read stuff spring bean definitions:
<property name="ldapserver" value="secret"/> <property name="ldapport" value="389"/> <property name="ldapuser" value="cn=stefan blixt,ou=x,ou=x,ou=x,dc=x,dc=x"/> <property name="ldappassword" value="secret"/> <property name="usergroup" value="ou=x,ou=x,ou=x,dc=x,dc=x"/> <property name="userprefix" value="cn"/>
activiti first run checkpassword(), returns true, run finduserbyquerycriteria(), outputs this:
debug: com.abc.activiti.ldap.ldapusermanager - looking users: '(cn=stefan blixt)' debug: com.abc.activiti.ldap.ldapusermanager - got cursor: org.apache.directory.ldap.client.api.searchcursor@1e3940a debug: com.abc.activiti.ldap.ldapusermanager - returning users: []
i have managed connect , kind of query in apache directory studio:
that 1 give me result entry stefan blixt.
i've edited paths above privacy.
any ideas? there classic culprits may result in 0 results when doing ldap user search? i've tried using uid, samaccountname etc when searching - same result.
it appears finduserbyquerycriteria
creating new ldapconnection , not doing bind()
on it. perhaps advertisement server not allow anonymous queries.
java search active-directory ldap
Comments
Post a Comment