2017.6.8 spring-ldap基本使用总结
之前学习过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;
}
2017.6.8 spring-ldap基本使用总结的更多相关文章
- Spring LDAP
LDAP Spring LDAP 使用 - Sayi像秋天一样优雅 - 开源中国社区 http://docs.spring.io/spring-ldap/docs/current/reference/ ...
- Spring LDAP的使用
LDAP入门http://www.jianshu.com/p/7e4d99f6baaf Spring LDAP,是Spring的一个组件,实现对LDAP的操作. 在编程操作MySQL时,我们除了用JD ...
- 2017技术核心——Spring
从毕业从事Java WEB开始到现在已差不多快5年时间了,一直使用的Spring相关的技术,其实最主要的是SpringMVC这一块.其实,一直停留在用的地步,并不知晓其原理,真正耐下心来去研究Spri ...
- Spring Ldap 的增删改查
package ldap.entity; /** * 本测试类person对象来自schema文件的core.schema文件 * objectClass为person,必填属性和可选属性也是根据该对 ...
- 2017.3.31 spring mvc教程(八) <mvc:annotation-driven />所做的工作
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- 2017.3.31 spring mvc教程(七)多视图控制器
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- 2017.3.31 spring mvc教程(六)转发、重定向、ajax请求
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- 2017.3.31 spring mvc教程(五)Action的单元测试
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- 2017.3.31 spring mvc教程(四)全局的异常处理
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- 2017.3.31 spring mvc教程(三)拦截器
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
随机推荐
- python代理池的实现
https://github.com/wangqifan/ProxyPool http://python.jobbole.com/86994/
- Audio Unit 介绍
关于 Audio Unit iOS 提供了音频处理插件,支持混音,声音均衡,格式转化,以及用于录音,回放,离线渲染,实时对话的输入输出.可以动态载入和使用这些强大而灵活的插件,在 iOS 应用中这些插 ...
- 转:Java NIO
Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO.感谢并发编程网的翻译和投递 ...
- MySQL5.7源码安装问题汇总
编译安装mysql5.7版本,想试用一下新的版本特性,发现跟之前的5.6版本编译有了一些变化,总结一下避免以后继续入坑.5.6安装方式 cmake版本 5.7编译cmake要求版本最低为2.8,当前为 ...
- 消耗战(bzoj 2286)
Description 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战斗,我军 ...
- .com和.cn域名的区别所在,各个域名后缀含义
很多人在注册域名的时候不明白域名后缀的含义,在这里就介绍两种最为常用的域名,介绍下他们的区别以及适用的范围.需要先查询是否被注册,我们经常去的就是西部数据和万网,查询并注册未被注册的域名,一般无论是什 ...
- 经典linux书籍
入门篇<LINUX权威指南>书不错,写的很全面也比较广,涉及的不深,做为入门书籍不错,可以比较全面的了解linux .另外比较热门的也可以看看<鸟哥的私房菜>等书,偏管理类的书 ...
- YYH的球盒游戏(NOIP模拟赛Round 6)
题目描述 YYH有一些总共有种颜色的球,他有颜色的球个.他同样有个盒子,第个盒子能放个球. 他的目标是把这个球按规则放进个盒子里: 对于一个盒子,对于每种颜色的球至多只能放个. 把颜色为的球放进盒子, ...
- Sqlite 约束条件 Constraints
一.约束 Constraints 我们在数据库中存储数据的时候,有一些数据有明显的约束条件. 比如一所学校关于教师的数据表,其中的字段列可能有如下约束: 年龄 - 至少大于20岁.如果你想录入一个小于 ...
- C++ emplace_back
在C++开发过程中,我们经常会用STL的各种容器,比如vector,map,set等,这些容器极大的方便了我们的开发.在使用这些容器的过程中,我们会大量用到的操作就是插入操作,比如vector的pus ...