前几天遇到一个项目,是关于ldap的。我们的框架使用的是springMVC,于是便找了一下找了一些相关的内容,在项目中融入了ldap;
开发环境:myeclipse8.6+tomcat6.0+jdk1.6+ mysql +OpenLDAP win7
首先需要一些ldap的jar包spring-ldap-1.3.0.RELEASE-all.jar,至于spring的jar包就不说了。
然后配置application.xml配置文件:
a.首先是数据库配置信息,mysql与ldap:
<!-- 数据库配置信息 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
<value>classpath:ldap.properties</value>
</list>
</property>
</bean>
b.然后配置ldap服务器信息,同jdbc配置
<!-- ldap服务配置 -->
<bean id="contextSource"
class="org.springframework.ldap.core.support.LdapContextSource">
<property name="url" value="${urls}" />
<property name="base" value="${basepath}" />
<property name="userDn" value="${userDn}" />
<property name="password" value="${password}" />
</bean>
<!--ldap模板配置-->
<bean id="ldapTemplate"
class="org.springframework.ldap.core.LdapTemplate">
<constructor-arg ref="contextSource" />
</bean>
ok,以上就是application.xml中的配置,进行如上配置基本就ok了可以使用了。下面就可是使用啦:
首先要配置ldap.properties文件,一下是我的ldap配置信息
urls=ldap://192.168.1.188:389
userDn=cn=root,dc=ncs,dc=com,dc=cn
password=111111
basepath=dc=ncs,dc=com,dc=cn
Manager层,我把要从ldap取出的信息设置成了对象,这样就比较好操作:
@Repository
public class LdapUserManager {
private LdapTemplate ldapTemplate;
public void setLdapTemplate(LdapTemplate ldapTemplate) {
this.ldapTemplate = ldapTemplate;
}
//获取所有的用户信息,根据filter条件
@SuppressWarnings("unchecked")
public List<LdapUser> getAllUsers() {
EqualsFilter filter = new EqualsFilter("objectclass", "ncsUser");
return ldapTemplate.search(DistinguishedName.EMPTY_PATH, filter.encode(), new AttributesMapper() {
public Object mapFromAttributes(Attributes attrs) throws NamingException {
//取出信息放入到实体类中,返回
LdapUser ldapuser = new LdapUser();
ldapuser.setGivenname(attrs.get("ncsusername").get()+"");
ldapuser.setUserPassword(attrs.get("ncsuserpassword").get()+"");
return ldapuser;
}
});
}
}
service层就是简单的调用Manager层了:
@Service
public class LdapUserServiceImpl extends BaseService{
//
public List<LdapUser> getAllUsers() {
return ldapUserManager.getAllUsers();
}
}
action层调用,并打印出获取的信息。
@Controller
@RequestMapping("/ldapUser.do")
public class LdapUserAction {
@Autowired
public LdapUserServiceImpl ldapUserServiceImpl;
private Logger log = Logger.getLogger(LdapGroupAction.class);
@RequestMapping(params = "method=getldapuser")
public ModelAndView getLdapuser(HttpServletRequest request,HttpServletResponse response) throws IOException{
List<LdapUser> listuser = ldapUserServiceImpl.getAllUsers();
for(int i=0;i<listuser.size();i++){
LdapUser ldapUser = listuser.get(i);
log.debug("Givenname:"+ldapUser.getGivenname());
log.debug("UserPassword:"+ldapUser.getUserPassword());
}
return null;
}
}