Just like you have JDBC/Hibernate/iBatis templates in Spring, we also
have an LDAPTemplate. You can download the spring LDAP library
from
http://springframework.org/ldap.
I like this template approach simply because it lets us avoid common
pitfalls such as not cleaning up resources after using an API (in JDBC
its the connection, statement and resultset). Why bother when the
template can do this for you. Same holds true for LDAP queries.
For this example I had the following setup:
- Apache Directory Server 1.5.2. I decided to use the sample
directory data.
- Installed the Apache Directory Studio eclipse plugin.
To confirm your setup. Open eclipse and go to the LDAP perspective.
Create a new connection with following information:
- hostname - localhost
- port - 10389
- Bind DN or user - uid=admin,ou=system
- password - secret (this is the default password for apache
ds)
This should let you into the directory. Under dc=example,dc=com I added two organizations (asia and americas).
Now for the Spring stuff.
|
package
trial;
import
java.util.List;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.ldap.core.LdapTemplate;
import
org.springframework.stereotype.Service;
@Service
public
class
LDAPSampleImpl implements
LDAPSample {
@Autowired
private
LdapTemplate ldapTemplate;
@Override
public
List
getOrgNames() {
return
ldapTemplate.list("");
}
}
|
The spring XML file looks like:
|
<?xml
version="1.0"
encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config
/>
<context:component-scan
base-package="trial"
/>
<bean
id="ldapContextSource"
class="org.springframework.ldap.core.support.LdapContextSource">
<property
name="url"
value="ldap://localhost:10389"
/>
<property
name="base"
value="dc=example,dc=com"
/>
<property
name="userDn"
value="uid=admin,ou=system"
/>
<property
name="password"
value="secret"
/>
</bean>
<bean
id="ldapTemplate"
class="org.springframework.ldap.core.LdapTemplate">
<constructor-arg
ref="ldapContextSource"
/>
</bean>
</beans>
|
Everything above is self explanatory. Now for the test case to execute
all of this.
|
package
trial;
import
org.junit.Test;
import
org.junit.runner.RunWith;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.test.context.ContextConfiguration;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations
= { "classpath:spring-context.xml"
})
public
class
DriverTestCase
{
@Autowired
private
LDAPSample ldap;
@Test
public
void
testGreeting()
{
System.out.println(ldap.getOrgNames());
}
}
|
Running this unit test results in output
>> [ou=asia, ou=americas]
Comments