Erro ao efetuar busca em LDAP de dentro de um servlet
6 respostas
A
amhfilho
Desenvolvi um servlet que tenta efetuar uma busca (search) em um servidor LDAP. Qualquer comando lança uma exception:
NotContextException: Not an instance of DirContext
Detalhe: se colocar este código em uma Java application (método main, executando do prompt) funciona normalmente. Dá erro apenas no servlet.
Alguém tem alguma idéia? Aqui vai o código:
Hashtable env = new Hashtable(11);
DirContext ctx = new InitialDirContext(env);
Eu não sei qual LDAP você está usando mas aqui com o OpenLDAP funciona sem problemas.
publicvoidservice(ServletRequestarg0,ServletResponsearg1)throwsServletException,IOException{connect();}publicvoidconnect(){try{Hashtableenv=newHashtable();env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");env.put(Context.SECURITY_AUTHENTICATION,"simple");env.put(Context.SECURITY_PRINCIPAL,"cn=administrator,dc=...");env.put(Context.SECURITY_CREDENTIALS,"....");env.put(Context.PROVIDER_URL,"ldap://localhost:389/dc=....");env.put("java.naming.ldap.version","3");ctx=newInitialDirContext(env);if(isObjectExist("dc","...")){System.out.println("dc=.... - exist");}else{System.out.println("dc=.... - not exist");}}catch(NamingExceptione){e.printStackTrace();}}publicbooleanisObjectExist(Stringobj,Stringvalue)throwsNamingException{returnsearch("",obj,value).hasMore();}publicNamingEnumerationsearch(Stringbind,Stringatt,Stringvalue)throwsNamingException{returnsearchFull(bind,"("+att+"="+value+")");}publicNamingEnumerationsearchFull(Stringbind,Stringfilter)throwsNamingException{SearchControlsctls=newSearchControls();ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);NamingEnumerationresult=ctx.search(bind,filter,ctls);returnresult;}
Espero que ajude.
Lao
A
amhfilho
Ainda não funcionou…
Estou usando o IBM Directory Server. Qual app server está utilizando? Existe alguma configuração que deve ser feita no app server?
Valeu
Chulao
Eu estou usando o JBoss, e não tive que fazer nenhuma parametrização.
O problema pode estar no diretório. Nós tivemos vários problemas quando mudamos do iPlanet para o OpenLDAP, muitas coisa que funcionavam no iPlanet tiveram que ter alguma coisa alterada ou retirada do código para funcionar no OpenLdap.
Sei que parece estranho, mas essa foi a realidade.
Agora nesse caso especifico eu não tenho IBM aqui para poder testar, mas aqui eu não tive nenhum problema de rodar o código dentro ou fora do AppServer.
[]s
A
amhfilho
Não tem nada específico no seu web.xml ?
Chulao
Sobre LDAP somente isso.
[]s
ratowar
estou com o mesmo problema…
se vc conseguir resolver, poste a solução, por favor.