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

注:公司需要在登录功能中添加 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 env = new Hashtable(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;
    }
}

你可能感兴趣的:(java,工作相关)