Thanks this makes a little more sense now. I'm still experiencing problems though. I get the error show below in the log...
Does this error indicate that there's something wrong with the role context used or that it can't find a match within that context ?
The following ldapsearch command produces valid results:
ldapsearch -h groupware_3 "(&(member=Rob Monie)(objectClass=groupOfNames))"
It feels like i'm very close but still missing something obvious
Code:
DEBUG - LdapPasswordAuthenticationDao.loadUserByUsernameAndPassword(699) | Connecting to ldap://groupware_3:389/o=GroupWare,c=AU as Rob Monie
INFO - LdapPasswordAuthenticationDao.getRolesFromRoleSearch(544) | Unable to find user-role match in context = o=GroupWare,c=AU
javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'o=GroupWare,c=AU'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3013)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2934)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2740)
at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1811)
at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1734)
at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1751)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:394)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:362)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:346)
at javax.naming.directory.InitialDirContext.search(InitialDirContext.java:253)
at net.sf.acegisecurity.providers.dao.ldap.LdapPasswordAuthenticationDao.getRolesFromRoleSearch(LdapPasswordAuthenticationDao.java:539)
at net.sf.acegisecurity.providers.dao.ldap.LdapPasswordAuthenticationDao.loadUserByUsernameAndPassword(LdapPasswordAuthenticationDao.java:705)
at net.sf.acegisecurity.providers.dao.PasswordDaoAuthenticationProvider.getUserFromBackend(PasswordDaoAuthenticationProvider.java:292)
at net.sf.acegisecurity.providers.dao.PasswordDaoAuthenticationProvider.authenticate(PasswordDaoAuthenticationProvider.java:177)
at net.sf.acegisecurity.providers.ProviderManager.doAuthentication(ProviderManager.java:159)
at net.sf.acegisecurity.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:49)
at net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilter.attemptAuthentication(AuthenticationProcessingFilter.java:90)
at net.sf.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:356)
at net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
at net.sf.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:217)
at net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
at net.sf.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:179)
at net.sf.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:125)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:509)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:211)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:805)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:696)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:605)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:677)
at java.lang.Thread.run(Thread.java:534)
My new config is as follows
Code:
<bean id="ldapDaoImpl" class="net.sf.acegisecurity.providers.dao.ldap.LdapPasswordAuthenticationDao">
<property name="URL"><value>ldap://groupware_3:389/</value></property>
<property name="rootContext"><value>o=GroupWare,c=AU</value></property>
<!-- here {0} is the username -->
<property name="userContext"><value>cn={0},o=GroupWare,c=AU</value></property>
<property name="roleContext"><value>o=GroupWare,c=AU</value></property>
<!-- <property name="userRolesAttribute"><value>memberOf</value></property>-->
<!-- here {0} is the distinguished name (which would be uid=USERNAME,ou=Users,dc=mycompany,cd=com
and {1} is the username. -->
<property name="roleAttributesSearchFilter"><value><![CDATA[(&(member={0})(objectClass=groupOfNames))]]></value></property>
<property name="roleNameAttribute"><value>cn</value></property>
<property name="defaultRole"><value>ROLE_EMPLOYEE</value></property>
</bean>