`
SSailYang
  • 浏览: 312988 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用 Spring LDAP 读取数据并映射到 Java Bean 中

阅读更多
写此小文总结一下平时工作的收获。

入正题,工作涉及到了对 LDAP 的 CRUD 操作,不忍同事用 JLDAP 写的冗长代码(主要并不是 JLDAP 的错。冗长代码问题可以通过代码重构和 Java 反射去解决)。后发现 Spring LDAP 是用来写 LDAP 相关程序的一个不错的选择之一(并没有深入了解别的框架)。直接上代码,希望能给同样需要操作 LDAP 的朋友一些帮助:

LdapTemplate ldapTemplate = buildLdapTemplate();

AndFilter filter = new AndFilter();
filter.and(new EqualsFilter("oacAttrMsisdn", "1"));
filter.and(new EqualsFilter("oacAttrCategory", "UserProfileRule"));

List list = ldapTemplate.search("oacAttrCategory=UserProfileRule",
	filter.encode(), new BeanAttributesMapper(new UserProfileRule()));

private static LdapTemplate buildLdapTemplate() throws Exception {
	LdapContextSource contextSource = new LdapContextSource();
	contextSource.setUrl("ldap://localhost:389");
	contextSource.setBase("dc=example,dc=com");
	contextSource.setUserDn("cn=Directory Manage");
	contextSource.setPassword("ds");
	contextSource.afterPropertiesSet();

	LdapTemplate ldapTemplate = new LdapTemplate();
	ldapTemplate.setContextSource(contextSource);
	return ldapTemplate;
}

public class BeanAttributesMapper implements AttributesMapper {
	private List<String> skipAttrs;
	
	private Object bean;

	public Object mapFromAttributes(Attributes attributes)
			throws NamingException {
		NamingEnumeration attrEnumeration = attributes.getAll();
		while (attrEnumeration.hasMore()) {
			Attribute attr = (Attribute) attrEnumeration.next();
			System.out.println(attr.getID() + " : " + attr.get());
			String ldapAttr = attr.getID().replace("oacAttr", "");
			if (!skipAttrs.contains(ldapAttr))
				setProperty(bean, attr.getID().replace("oacAttr", ""),
						attr.get());
		}
		return bean;
	}

	public void setProperty(Object bean, String name, Object value) {
		String setterName = "set" + StringUtils.capitalize(name);
		Method setter;
		try {
			setter = bean.getClass().getMethod(setterName, value.getClass());
			setter.invoke(bean, value);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}


LDAP entry 与 Java Bean 映射的条件是 LDAP attribute name 要和 Java Bean 的属性名之间有映射关系,在这里就是 LDAP 属性名除去前缀就是 Java Bean 中的属性名。Spring LDAP 文档中有专门一章是介绍 Java Bean 与 LDAP 数据间的映射,类似 ORM:http://static.springsource.org/spring-ldap/docs/1.3.x/reference/html/odm.html

BTW. 如果是个人做测试的话,OpenDS 是个不错的 LDAP 服务器的选择,Apache DS 和 OpenLDAP 用起来都不太方便。
1
1
分享到:
评论
1 楼 mrcuya1 2014-10-10  
这段代码貌似有点问题.BeanAttributesMapper类中的bean只有类初始化时产生的一个对象,之后只是对该对象属性的重复赋值,也就是最后得到的是最后赋值的对象

相关推荐

    Spring LDAP 简单使用

    它构建在Spring框架之上,提供了一种声明式的方式来处理 LDAP 查询,使得开发者能够更容易地集成LDAP服务到他们的应用中。 **安装与配置** 在开始使用Spring LDAP之前,你需要在项目中添加相关的依赖。如果你使用...

    Spring LDAP API(Spring LDAP 开发文档).CHM

    Spring LDAP。 官网 Spring LDAP API。 Spring LDAP 开发文档。

    spring-ldap1.3.1

    Spring LDAP 是一个强大的Java框架,专门设计用于简化与 Lightweight Directory Access Protocol (LDAP) 服务器的交互。在"spring-ldap1.3.1"版本中,这个框架提供了一个灵活且直观的API,允许开发者轻松地执行对...

    [Spring] Spring LDAP 实践开发 (英文版)

    Practical Spring LDAP is your guide to developing Java-based enterprise applications using the Spring LDAP Framework. This book explains the purpose and fundamental concepts of LDAP before giving a ...

    spring ldap 1.3.0下载

    在本文中,我们将深入探讨Spring LDAP 1.3.0版本,包括它的特点、用途、安装过程以及如何在实际项目中使用它。 **Spring LDAP 1.3.0概述** Spring LDAP 是Spring框架的一个扩展,它将Spring的数据抽象概念应用于...

    spring ldap的使用

    `AttributesMapper`是一个接口,用于将LDAP目录中的属性映射到Java对象。在上面的代码示例中,`UserDaoLdapImpl`类实现了一个匿名的`AttributesMapper`实例,该实例将`Attributes`对象转换为具体的Java类型,例如...

    Spring LDAP

    3. **对象映射**:Spring LDAP 提供了 LDAP 对象到 Java 对象的映射,简化了数据处理。 **二、核心概念** 1. **ContextSource**:这是Spring LDAP 的核心组件,用于配置与 LDAP 服务器的连接,并管理多个 LDAP 上...

    springldap例子

    通过研究提供的`applicationContext.xml`文件和相关的Java代码,我们可以学习到如何在实际项目中有效利用Spring LDAP进行目录服务的集成。 总之,Spring LDAP是一个强大的框架,它使得Java开发者能够轻松地处理LDAP...

    spring ldap操作(一)目录测试环境搭建

    在本篇博客“spring ldap操作(一)目录测试环境搭建”中,我们将深入探讨如何在Java应用程序中使用Spring LDAP框架来操作LDAP(轻量级目录访问协议)服务器,以及如何搭建一个测试环境来验证和调试相关功能。Spring...

    Ldap文件读取工具(Java)

    1. **可视化目录结构**:打开JXplorer并连接到LDAP服务器,可以看到目录服务的树状视图。 2. **搜索和浏览条目**:在界面上输入过滤条件,可以方便地查找特定条目,并查看其属性和子条目。 3. **编辑条目**:选择...

    Practical Spring LDAP英文原版

    《Practical Spring LDAP》是一本面向中级Java开发者的专业书籍,专注于使用Spring LDAP框架构建企业级应用程序。Spring LDAP是Spring框架的一个扩展,旨在简化Java与 Lightweight Directory Access Protocol (LDAP)...

    JAVA中使用LDAP进行用户认证

    JAVA中使用LDAP进行用户认证 JAVA中使用LDAP进行用户认证是指在JAVA应用程序中使用轻量级目录访问协议(LDAP)来进行用户身份验证。LDAP是一种基于X.500标准的目录访问协议,但它更简单、更灵活,可以根据需要进行...

    Java操作ldap(springboot工程)

    3. **数据转换**: 设计一个转换类,使用反射方法读取ldap条目的属性,并将其赋值给对应的Java对象。 4. **查询操作**: 使用`LdapTemplate`进行查询、增删改查等操作。例如,查找特定用户、更新用户信息等。 5. **...

    spring_ldap

    - **org.springframework.ldap.odm**:对象数据映射(Object Data Mapping)包,实现了将 Java 对象与 LDAP 条目之间的映射。 #### 基本操作 Spring LDAP 提供了丰富的基本操作,包括但不限于: - **搜索和查找**...

    spring-ldap demo

    Spring LDAP 是一个基于 Spring 框架的 LDAP(轻量级目录访问协议)客户端库,它简化了在 Java 应用程序中与 LDAP 服务器的交互。本示例项目 "spring-ldap demo" 提供了一个关于如何使用 Spring LDAP 进行实际操作的...

    SpringLDAP和JNDI的增删改查

    在Java开发中,当我们需要与目录服务进行交互,例如用户认证、权限管理等,Spring LDAP和Java Naming and Directory Interface (JNDI)是两个常用的技术。本文将通过一个入门级的例子,详细介绍如何利用Spring LDAP和...

    spring-Ldap

    Spring-Ldap 是一个基于 Spring 框架的 LDAP(轻量级目录访问协议)开发工具包,它为在 Java 应用中使用 LDAP 提供了强大的支持。这个项目是为了简化 LDAP 数据的集成,提供了一种与 Spring 框架无缝集成的方式,...

    Spring Boot中使用LDAP来统一管理用户信息的示例

    Spring Boot 中使用 LDAP 统一管理用户信息的示例 本篇文章主要介绍了 Spring Boot 中使用 LDAP 来统一管理用户信息的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。下面我们将详细介绍 LDAP 的基础...

    基于springldap的增删改查以及验证

    在Spring LDAP中,我们通常会使用`LdapTemplate`来进行数据的添加。首先,需要创建一个`LdapEntry`对象,包含要插入的属性和值。然后调用`LdapTemplate`的`add()`方法,传入DN(Distinguished Name)和`LdapEntry`。...

Global site tag (gtag.js) - Google Analytics