您的位置:首页 > 编程语言 > Java开发

java 连接 LDAP 进行登录验证初接触

2017-11-03 17:11 495 查看
注:公司需要在登录功能中添加 LDAP 验证功能,本篇只是本人的相关工作笔记,都是最简单的内容,而且可能有错漏,不小心点开的网友可以直接关闭,不需要在这浪费时间。

一 参考博文资料

1. 图文介绍openLDAP在windows上的安装配置

2. Windows下OpenLDAP的安装及使用(一)

3. (转)JNDI/LDAP Active Directory验证第五部分 Simple

二 OpenLDAP for Windows 安装包

openldap-for-windows.msi

感觉是不是自己找的参考资料时间太久了,很多新的版本 OpenLDAP for Windows 的安装包跟参考的博文中安装后的目录结构完全不一样。没办法找了好久,终于找到一个能用的。

三 java 连接 LDAP 服务器进行验证

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
public class LDAPService {

protected Logger logger = LoggerFactory.getLogger(getClass());

private String LDAP_URL;

/**
* LDAP验证用户登录
* @param userName
* @param password
* @return
*/
public boolean authenticate(String userName, String password) {
boolean bRtn = false;// 标注是否验证成功,初始为false
Hashtable<String, String> env = new Hashtable<String, String>(4);
// LDAP 服务器的 URL 地址,
LDAP_URL = "ldap://xxx.xxx.xxx/dc=aaa,dc=bbb";
//env 中的key都是固定值在 javax.naming.Context 类中
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");// ldapCF
env.put(Context.PROVIDER_URL, LDAP_URL);// ldapURL
env.put(Context.SECURITY_AUTHENTICATION, "simple"); // ldapAuthMode
//username和对应的password怎么在LDAP服务器中设置,我也不知道
//通过默认的用户名"cn=manager,dc=aaa,dc=bbb"(aaa、bbb的具体值要在配置文件中配置,具体看参考博文)和密码"secret",可以测试连接是否成功
env.put(Context.SECURITY_PRINCIPAL, userName);
env.put(Context.SECURITY_CREDENTIALS, password);
DirContext ctx = null;
try {
//这条代码执行成功就是验证通过了,至于为什么我也不知道
ctx = new InitialDirContext(env);
bRtn = true;
logger.info("Ldap验证通过!");
} catch (Exception ex) {
logger.error("Ldap 初始化 出错:", ex);
} finally {
try {
if (ctx != null) {
ctx.close();
ctx = null;
}
env.clear();
} catch (Exception e) {
logger.error("Ldap context close出错:", e);
}
}
if (StringUtils.isBlank(LDAP_URL)) {
bRtn = true;
}
//验证成功返回 true,验证失败返回false
return bRtn;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: