- 浏览: 93440 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
jinnianshilongnian:
TheMatrix 写道CL0724 写道xiaobadi 写 ...
spring3配置文件中的<context:property-placeholder>标签 -
TheMatrix:
CL0724 写道xiaobadi 写道:<contex ...
spring3配置文件中的<context:property-placeholder>标签 -
hovei:
[b][/b][i][/i][u][/u]引用
[img][ ...
安全测试 关于会话标识未更新的解决方法 -
CL0724:
xiaobadi 写道:<context:propert ...
spring3配置文件中的<context:property-placeholder>标签 -
xiaobadi:
:<context:property-placehold ...
spring3配置文件中的<context:property-placeholder>标签
为了读取公司域账号,使用上ldap接口,Java编码如下 ;
maven项目添加
如上是获取用户的代码,但是我想校验用户的用户名密码是否正确,经过网上查找资料,spring目前没有找到可以做到的方法,所有,还是使用原生的API,代码如下
附件是spring-ldap-reference.pdf文档,可以再详细研究
maven项目添加
<dependency> <groupId>org.springframework.ldap</groupId> <artifactId>spring-ldap-core</artifactId> <version>2.0.2.RELEASE</version> </dependency>
/** * */ package com.howbuy.uaa.ldap; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.ldap.core.AuthenticationSource; import org.springframework.ldap.core.LdapTemplate; import org.springframework.ldap.core.support.LdapContextSource; /** * @author qiankun.li * */ public class UaaLdapTemplate { private LDAPAuthentication authentication; private static LdapTemplate template; private Map<String, List<User>> cacheMap = new HashMap<String, List<User>>(); private final String USER_CACHE_KEY = "user_cache_key"; /** * ldap服务器URL */ private String url; /** * baseDn */ private String baseDn; /** * ldap服务器账号 */ private String principal; /** * ldap服务器密码 */ private String credentials; void init() { LdapContextSource cs = new LdapContextSource(); cs.setCacheEnvironmentProperties(false); cs.setUrl(url); cs.setBase(baseDn); cs.setAuthenticationSource(new AuthenticationSource() { @Override public String getCredentials() { return credentials; } @Override public String getPrincipal() { return principal; } }); template = new LdapTemplate(cs); } /**获取所有的用户数据 * @param isFromCache 是否从本地缓存取数据 true/false * @return */ public List<User> getAllUser(boolean isFromCache) { List<User> result = null; boolean isFromLocal = false; if(isFromCache){ result = cacheMap.get(USER_CACHE_KEY); if(null==result){ isFromLocal = true; } }else{ isFromLocal = true; } if(isFromLocal){ result = new ArrayList<User>(); String baseCeo = "OU=CEO"; String base_hk = "OU=staff-hk,OU=howbuy-hk"; String base_pd = "OU=staff-pd,OU=howbuy-pd"; List<User> ceo = template.search(baseCeo, "(objectclass=user)", new UserMapper()); List<User> hk = template.search(base_hk, "(objectclass=user)", new UserMapper()); List<User> pd = template.search(base_pd, "(objectclass=user)", new UserMapper()); result.addAll(ceo); result.addAll(hk); result.addAll(pd); putUsersToCache(result); } return result; } private void putUsersToCache(List<User> result){ cacheMap.put(USER_CACHE_KEY, result); System.out.println("put key ["+USER_CACHE_KEY+"] value into localCache successed"); } /** * 判断用户是否合法,当用户名密码都正确的时候返回true,否则false * @param UID * @param password * @return */ public boolean authenricate(String UID, String password) { return authentication.authenricate(UID, password); } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getBaseDn() { return baseDn; } public void setBaseDn(String baseDn) { this.baseDn = baseDn; } public String getPrincipal() { return principal; } public void setPrincipal(String principal) { this.principal = principal; } public String getCredentials() { return credentials; } public void setCredentials(String credentials) { this.credentials = credentials; } public LDAPAuthentication getAuthentication() { return authentication; } public void setAuthentication(LDAPAuthentication authentication) { this.authentication = authentication; } }
如上是获取用户的代码,但是我想校验用户的用户名密码是否正确,经过网上查找资料,spring目前没有找到可以做到的方法,所有,还是使用原生的API,代码如下
package com.howbuy.uaa.ldap; import java.util.Hashtable; import javax.naming.AuthenticationException; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import javax.naming.ldap.Control; import javax.naming.ldap.InitialLdapContext; import javax.naming.ldap.LdapContext; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LDAPAuthentication { private static final Logger LOGGER = LoggerFactory .getLogger(LDAPAuthentication.class); private String url; private String baseDn; private String principal; private String credentials; private String factory = "com.sun.jndi.ldap.LdapCtxFactory"; private LdapContext ctx = null; private final Control[] connCtls = null; private void LDAP_connect() throws Exception { if (null == ctx) { Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, factory); env.put(Context.PROVIDER_URL, url + baseDn); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, principal); env.put(Context.SECURITY_CREDENTIALS, credentials); // 此处若不指定用户名和密码,则自动转换为匿名登录 try { ctx = new InitialLdapContext(env, connCtls); } catch (javax.naming.AuthenticationException e) { throw e; } catch (Exception e) { throw e; } } } private String getUserDN(String uid) throws Exception { String userDN = ""; LDAP_connect(); try { SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration<SearchResult> en = ctx.search("","sAMAccountName=" + uid, constraints); if (en == null || !en.hasMoreElements()) { LOGGER.warn("未找到用户:" + uid); return userDN; } // maybe more than one element while (en != null && en.hasMoreElements()) { Object obj = en.nextElement(); if (obj instanceof SearchResult) { SearchResult si = (SearchResult) obj; userDN += si.getName(); userDN += "," + baseDn; } } } catch (Exception e) { LOGGER.error("查找用户[" + uid + "]时产生异常", e.getMessage()); } return userDN; } public boolean authenricate(String UID, String password) { boolean valide = false; String userDN = ""; try { userDN = getUserDN(UID); if(StringUtils.isNotBlank(userDN)){ LOGGER.info("userDN:" + userDN); ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN); ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, password); ctx.reconnect(connCtls); LOGGER.info(userDN + ",验证通过"); valide = true; } } catch (AuthenticationException e) { LOGGER.info(userDN + ",验证失败", e.getMessage()); valide = false; } catch (NamingException e) { LOGGER.info(userDN + ",验证失败", e.getMessage()); valide = false; } catch (Exception e) { LOGGER.info(userDN + ",验证失败", e.getMessage()); } try { ctx.close(); } catch (NamingException e) { LOGGER.info("关闭LdapContext对象失败", e.getMessage()); }finally{ if(null!=ctx){ ctx=null; } } return valide; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getBaseDn() { return baseDn; } public void setBaseDn(String baseDn) { this.baseDn = baseDn; } public String getPrincipal() { return principal; } public void setPrincipal(String principal) { this.principal = principal; } public String getCredentials() { return credentials; } public void setCredentials(String credentials) { this.credentials = credentials; } }
package com.howbuy.uaa.ldap; import java.util.List; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import org.springframework.ldap.core.AttributesMapper; public class UserMapper implements AttributesMapper<User> { @Override public User mapFromAttributes(Attributes attributes) throws NamingException { User user = new User(); Attribute attributeCn = attributes.get("cn"); if (null != attributeCn) { user.setUserName(attributeCn.get().toString()); } Attribute attributeAcc = attributes.get("sAMAccountName"); if (null != attributeAcc) { user.setAccount(attributeAcc.get().toString()); } Attribute attributeMail = attributes.get("mail"); if (null != attributeMail) { user.setEmail(attributeMail.get().toString()); } Attribute attributeUid = attributes.get("member"); if (null != attributeUid) { int size = attributeUid.size(); List<String> memberList = user.getMemberList(); for (int i = 0; i < size; i++) { String ms = attributeUid.get(i).toString(); memberList.add(ms); } } Attribute attributeDistinguishedName = attributes.get("distinguishedName"); if(null!=attributeDistinguishedName){ user.setDistinguishedName(attributeDistinguishedName.get().toString()); }else{ return null; } return user; } }
/** * */ package com.howbuy.uaa.ldap; import java.util.ArrayList; import java.util.List; /** * @author qiankun.li * */ public class User { /** * 域账号 */ private String account; /** * 中文名称 */ private String userName; /** * email */ private String email; /** * 详细Dn */ private String distinguishedName; private List<String> memberList = new ArrayList<String>(0); public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public List<String> getMemberList() { return memberList; } public void setMemberList(List<String> memberList) { this.memberList = memberList; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getDistinguishedName() { return distinguishedName; } public void setDistinguishedName(String distinguishedName) { this.distinguishedName = distinguishedName; } }结合起来使用,ok,
附件是spring-ldap-reference.pdf文档,可以再详细研究
- spring-ldap-reference.pdf (196.9 KB)
- 下载次数: 6
发表评论
-
java读写锁ReentrantReadWriteLock的初体验
2015-10-14 23:51 8081业务要求: 消息中间件kafka即时发送消息对象,stor ... -
注解式springMVC的demo
2015-09-14 20:13 1373项目中使用springmvc,使用注解标签,spring版本3 ... -
ArrayList和LinkedList的区别
2014-10-20 15:20 713一般大家都知道ArrayList和LinkedList的大致区 ... -
java 中将以逗号分隔的字符串按照N个一组划分的方法
2013-10-29 23:38 6525import java.util.ArrayList; ... -
java反射demo
2013-05-25 00:53 887/** * */ package *; ... -
java中ArrayList和LinkedList的区别 转自http://pengcqu.iteye.com/blog/502676
2013-05-25 00:50 889JAVA语言中的反射机制: ... -
struts OGNL(转载)
2013-03-14 23:12 820Struts2使用之值栈与OGNL-使用 访问属性 ... -
java禁止不需要的HTTP 方 法
2012-10-30 19:03 2945项目安全扫描,报告: 启用了不安全的HTTP 方法 安全风险 ... -
安全测试 关于会话标识未更新的解决方法
2012-10-30 16:05 25346最近本人搭了一个框架 ... -
java关键字,native,strictfp,transient,volatile (转自http://blog.csdn.net/sodino)
2012-10-29 20:56 900Java关键字(keywords) ... -
Java中各类Cache机制实现解决方案(转自http://www.csdn.net/article/2010-04-09/263704)
2012-10-29 17:37 1230在Java中,不同的类都有自己单独的Cache机制,实现的方法 ... -
Java编程中“为了性能”需做的26件事(转自http://www.csdn.net/article/2012-06-01/2806249)
2012-10-29 17:18 813下面是参考网络资源总 ... -
一些我需要用的资料
2012-10-16 22:51 0flex在线参考资料http://help.adobe.com ... -
Log4j简介(转载自http://www.iteye.com/topic/165955)
2012-10-12 14:36 1031Log4j的简介: Log4j是Apache的一个开放源代码 ... -
Log4j入门(转载自http://xuxn.iteye.com/blog/416380)
2012-10-12 14:34 1012首先要将 log4j-1.2.8.jar & comm ... -
关于java数据连接池的一些配置(转载自http://qrqzhujinyi.iteye.com/blog/698279)
2012-10-11 14:43 943数据库连接池配置 概述 ... -
JAVA考试知识覆盖要点
2012-09-29 16:14 0JAVA考试知识覆盖要点: (1)常用的集合类,如Set、Ma ... -
Java1.5泛型指南中文版(Java1.5 Generic Tutorial)(转帖)
2012-09-25 10:08 743由于文章字数太多,附上地址吧http://blog.csdn. ... -
关于java泛型的学习
2012-10-09 18:47 1256java中我们经常用泛型的占位符,T E K V的含义 T = ... -
一个生成验证码的类
2012-09-24 11:08 1094package com.huawei.tsm.business ...
相关推荐
在开始使用Spring LDAP之前,你需要在项目中添加相关的依赖。如果你使用的是Maven,可以在pom.xml文件中添加如下依赖: ```xml <groupId>org.springframework.ldap <artifactId>spring-ldap-core 版本号 ``` 请...
Spring LDAP。 官网 Spring LDAP API。 Spring LDAP 开发文档。
Spring Data LDAP API。 Spring Data LDAP 开发文档。 官网 Spring Data LDAP API。
spring-ldap-core-1.3.0.RELEASE.jar
Spring-Ldap 是一个基于 Spring 框架的 LDAP(轻量级目录访问协议)开发工具包,它为在 Java 应用中使用 LDAP 提供了强大的支持。这个项目是为了简化 LDAP 数据的集成,提供了一种与 Spring 框架无缝集成的方式,...
Spring LDAP 是一个强大的...总之,Spring LDAP 1.3.1为Java开发者提供了一种高效且易于使用的工具,以处理与LDAP服务器的交互。通过它的强大功能,开发者可以更加专注于业务逻辑,而无需深入了解复杂的LDAP协议细节。
Spring Boot 中使用 LDAP 统一管理用户信息的示例 本篇文章主要介绍了 Spring Boot 中使用 LDAP 来统一管理用户信息的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。下面我们将详细介绍 LDAP 的基础...
Spring框架与LDAP(轻量级目录访问协议)的结合使用,可以实现高效的单点登录(Single Sign-On,简称SSO)系统。SSO允许用户在多个应用系统中只需要登录一次,即可访问所有相互信任的应用系统,提高了用户体验并简化...
Spring Security LDAP不仅可以与Spring MVC或Spring Boot集成,还可以与Spring Data LDAP一起使用,简化对LDAP数据的CRUD操作。此外,它可以与其他身份验证机制(如数据库认证)结合,提供多因素认证。 **7. 性能...
为了更好地理解如何在实际项目中使用 Spring LDAP,这里提供了一个完整的 `PersonDao` 类示例,该类展示了如何使用 Spring LDAP 进行搜索、查找、绑定和修改等操作。 #### 扩展 API 方法 Spring LDAP 还允许开发者...
本示例项目 "spring-ldap demo" 提供了一个关于如何使用 Spring LDAP 进行实际操作的详细教程,包括与 LDAP 目录的增删查改操作,并结合了 EXT.js 进行前端展示。 首先,我们来了解一下 Spring LDAP 的核心概念。...
rar包:一个Web工程, 主要有,利用Spring-ldap对LDAP的基本操作(查询,增删改);Extjs实现的对Ldap的树状结构的显示,结构有点类似Softerra LDAP;一个测试类。 pdf:spring-ldap-reference.pdf Extjs.pdf ...
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 Boot项目中,我们可以使用`spring-boot-starter-ldap`和`spring-boot-starter-data-ldap`这两个starter来引入LDAP支持。在`pom.xml`或`build.gradle`文件中添加如下依赖: ```xml <groupId>org.spring...
spring-ldap-1.2.jar jar包
在本文中,我们将深入探讨Spring LDAP 1.3.0版本,包括它的特点、用途、安装过程以及如何在实际项目中使用它。 **Spring LDAP 1.3.0概述** Spring LDAP 是Spring框架的一个扩展,它将Spring的数据抽象概念应用于...
标题与描述中的关键词“spring ldap的使用”指向的是在Spring框架下集成轻量级目录访问协议(Lightweight Directory Access Protocol,简称LDAP)的相关知识。Spring LDAP是Spring框架的一部分,它提供了一种简单的...
《Spring Security LDAP 2.0.1:深度解析与实战指南》 在Java企业级开发中,Spring Security作为一款强大的安全框架,为应用程序提供了全面的安全管理解决方案。而其与LDAP(Lightweight Directory Access Protocol...
这篇博客文章“使用 Spring LDAP 读取数据并映射到 Java Bean 中”主要探讨了如何通过Spring LDAP来查询LDAP目录信息,并将查询结果转换为Java对象,以便在应用程序中进一步处理。 首先,`pom.xml`文件是Maven项目...
spring_ldap1.3的chm格式api