![]()
spring ldap
![]() ![]() Myeclipse 首先建个 web project Spring Core ,Spring Persistence ![]() 在上面还有个 struts1.2 ![]() 这个包 myeclipse 到此 jar 接口的代码 : } 接口类的代码: package whut.com.ldap; import java.util.List; import javax.naming.NamingException; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; import javax.naming.directory.SearchControls; import org.springframework.ldap.core.AttributesMapper; import org.springframework.ldap.core.DistinguishedName; import org.springframework.ldap.core.LdapTemplate; import org.springframework.ldap.filter.AndFilter; import org.springframework.ldap.filter.EqualsFilter; public class LDAPContactDAO implements ContactDAO { private LdapTemplate ldapTemplate; public void setLdapTemplate(LdapTemplate ldapTemplate) { this.ldapTemplate = ldapTemplate; } public List getAllContactNames() { return ldapTemplate.search("", "(objectclass=person)", new ContactAttributeMapper(){ public Object mapFromAttributes(Attributes attrs) throws NamingException{ return attrs.get("cn").get(); } }); } public List getByCn(String cn){ AndFilter andFilter=new AndFilter(); andFilter.and(new EqualsFilter("cn",cn)); return ldapTemplate.search("uid=employee", andFilter.encode(), new ContactAttributeMapper()); } public List getBySn(String sn){ AndFilter andFilter=new AndFilter(); andFilter.and(new EqualsFilter("sn",sn)); return ldapTemplate.search("uid=employee", andFilter.encode(), new ContactAttributeMapper()); } public List getContactDetails(String firstName,String lastName){ AndFilter andFilter=new AndFilter(); andFilter.and(new EqualsFilter("objectclass","person")); andFilter.and(new EqualsFilter("cn",firstName)); andFilter.and(new EqualsFilter("sn",lastName)); System.out.println("LDAP query :"+andFilter.encode()); return ldapTemplate.search("", andFilter.encode(), new ContactAttributeMapper()); } public void insertContact(ContactDTO contactDTO){ Attributes personAttributes=new BasicAttributes(); BasicAttribute personBasicAttribute=new BasicAttribute("objectclass"); personBasicAttribute.add("person"); personAttributes.put(personBasicAttribute); personAttributes.put("cn",contactDTO.getCommonName()); personAttributes.put("sn",contactDTO.getLastName()); personAttributes.put("description",contactDTO.getDescription()); DistinguishedName newContactDN=new DistinguishedName("uid=employee"); newContactDN.add("cn",contactDTO.getCommonName()); ldapTemplate.bind(newContactDN, null, personAttributes); } public void updateContact(ContactDTO contactDTO){ Attributes personAttributes=new BasicAttributes(); BasicAttribute personBasicAttribute=new BasicAttribute("objectclass"); personBasicAttribute.add("person"); personAttributes.put(personBasicAttribute); personAttributes.put("cn",contactDTO.getCommonName()); personAttributes.put("sn",contactDTO.getLastName()); personAttributes.put("description",contactDTO.getDescription()); DistinguishedName newContactDN=new DistinguishedName("uid=employee"); newContactDN.add("cn",contactDTO.getCommonName()); ldapTemplate.rebind(newContactDN, null, personAttributes); } public void deleteContact(ContactDTO contactDTO){ DistinguishedName newContactDN=new DistinguishedName("uid=employee"); newContactDN.add("cn",contactDTO.getCommonName()); ldapTemplate.unbind(newContactDN); } } 可能写的方法有点多,对于初学者(本人也是,哈哈)我们可以只定义一个方法,把上面 接口和类简单点: } 接口类: package whut.com.ldap; import java.util.List; import javax.naming.NamingException; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; import javax.naming.directory.SearchControls; import org.springframework.ldap.core.AttributesMapper; import org.springframework.ldap.core.DistinguishedName; import org.springframework.ldap.core.LdapTemplate; import org.springframework.ldap.filter.AndFilter; import org.springframework.ldap.filter.EqualsFilter; public class LDAPContactDAO implements ContactDAO { private LdapTemplate ldapTemplate; public void setLdapTemplate(LdapTemplate ldapTemplate) { this.ldapTemplate = ldapTemplate; } public List getAllContactNames() { return ldapTemplate.search("", "(objectclass=person)", new AttributesMapper public Object mapFromAttributes(Attributes attrs) throws NamingException{ return attrs.get("cn").get(); } }); } 这里只做一个方法的测试。 ( 接着当然是 application.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> <property name="url" value="ldap://localhost:389" /> <property name="base" value="o=tcl,c=cn" /> <property name="userDn" value="cn=Manager,o=tcl,c=cn" /> <property name="password" value="secret" /> </bean> <bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate" > <constructor-arg> <ref bean="contextSource" /> </constructor-arg> </bean> <bean id="ldapContact" class="whut.com.ldap.LDAPContactDAO"> <property name="ldapTemplate"> <ref bean="ldapTemplate" /> </property> </bean> </beans> contextSource bean 是用来和ldap连接的(注意有的class中可能这样定义: class="org.springframework.ldap.support.LdapContextSource")少了个core. 应该是版本不同,可以在referenced 库下的spring-ldap.jar包下去查看。 Base <property name="password" value="secret" /> 有的 userDn 下面的我就不多说了<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate" > <constructor-arg> (注意下有没有 core 最后一个 bean <bean id="ldapContact" class="whut.com.ldap.LDAPContactDAO"> <property name="ldapTemplate"> <ref bean="ldapTemplate" /> </property> </bean> 使用的是 spring 到此我们的 application.xml //Resource resource = new ClassPathResource("applicationContext.xml"); //BeanFactory factory=new XmlBeanFactory(resource); // ContactDAO ldapContact = (LDAPContactDAO)factory.getBean("ldapContact"); ApplicationContext ctx= ContactDAO ldapContact = (LDAPContactDAO)ctx.getBean("ldapContact"); List contactList = ldapContact.getAllContactNames(); System. } } System. } } } 在英文资料中给的是我注释的连接方式来得到一个实例的。(本人不太了解,所以用最简单的了。)到此一个简单的spring和ldap的应用就完了。 在英文资料中还有ContactDTO类和ContactAttributeMapper类。感兴趣的可以 看下英文资料 http://www.javaworld.com/javaworld/jw-06-2007/jw-06-springldap.html?page=2 |
spring-ldap
最新推荐文章于 2021-02-21 10:35:30 发布