正文
之前学习过spring-ldap的官方文档:2017.4.10 spring-ldap官方文档学习
现在是对实际使用的spring-ldap及使用过程中遇到的问题,进行总结。
1.spring-ldap的pom依赖
<!-- 添加Spring-ldap--> <dependency> <groupId>org.springframework.ldap</groupId> <artifactId>spring-ldap-core</artifactId> <version>2.3.1.RELEASE</version> </dependency>
下面的网址是spring的ldap页,里面有一个quick start。其中显示了spring-ldap最近的版本,并且勾选不同的版本,会自动生成依赖。
http://projects.spring.io/spring-ldap/
2.ldapTemplate的生成--方式1自动注入
2.1 spring-ldap声明
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ldap="http://www.springframework.org/schema/ldap" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/ldap http://www.springframework.org/schema/ldap/spring-ldap.xsd">
2.2 ldapTemplate bean
<context:property-placeholder location="classpath:/ldap.properties" />
<ldap:context-source id="contextSource" password="${sample.ldap.password}" url="${sample.ldap.url}" username="${sample.ldap.userDn}" base="${sample.ldap.base}" />
<ldap:ldap-template id="ldapTemplate" context-source-ref="contextSource"/>
或者
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> <property name="url" value="${sample.ldap.url}" /> <property name="base" value="${sample.ldap.base}" /> <property name="userDn" value="${sample.ldap.userDn}" /> <property name="password" value="${sample.ldap.password}" /> </bean> <bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate"> <constructor-arg ref="contextSource" /> </bean>
2.3 使用
@Autowired private LdapTemplate ldapTemplate;
3.ldapTemplate的生成--方式2代码生成
public LdapTemplate getLdapTemplate(){ LdapTemplate template = null; try { LdapContextSource contextSource = new LdapContextSource(); contextSource.setUrl(getSync_ldap_url()); contextSource.setBase(getSync_ldap_base()); contextSource.setUserDn(getSync_ldap_userDn()); contextSource.setPassword(getSync_ldap_password()); contextSource.setPooled(false); contextSource.afterPropertiesSet(); // important template = new LdapTemplate(contextSource); }catch (Exception e){ e.printStackTrace(); } return template; }
4.spring-ldap的使用
api的使用在上次的文档中已经学习过了:2017.4.10 spring-ldap官方文档学习
一些简单示例:
/** * 动态创建dn * @param user * @return */ private Name buildDn(User user) { return LdapNameBuilder.newInstance() .add("ou", "Users") .add("uid",user.getFdUserid().toString()) .build(); } /** * 在ldap里更新用户 * @param user */ private void updateUser(User user) { Name dn = buildDn(user); getLdapTemplate().rebind(dn, null, buildAttributes(user)); } /** * 在ldap里删除用户 * @param user */ private void deleteUser(User user) { Name dn = buildDn(user); getLdapTemplate().unbind(dn); } /** * 在ldap里创建用户 * @param user */ private void createUser(User user) { Name dn = buildDn(user); getLdapTemplate().bind(dn, null, buildAttributes(user)); } /** * 动态构建属性 * @param user * @return */ private Attributes buildAttributes(User user) { Attributes attrs = new BasicAttributes(); try { BasicAttribute objectclass = new BasicAttribute("objectclass"); objectclass.add("top"); objectclass.add("posixAccount"); objectclass.add("inetOrgPerson"); attrs.put(objectclass); attrs.put("userPassword", user.getFdLdapPassword() == null ? "" : user.getFdLdapPassword()); attrs.put("cn", user.getFdUsername() + "@" + user.getFdTenantName()); attrs.put("sn", user.getFdUsername() + "@" + user.getFdTenantName()); attrs.put("displayName", user.getFdDisplayName()== null? "":user.getFdDisplayName()); attrs.put("homeDirectory", "/root"); attrs.put("uidNumber", "0"); attrs.put("uid", user.getFdUserid().toString()); attrs.put("gidNumber", "0"); }catch (Exception e){ e.printStackTrace(); } return attrs; }