import com.sun.org.apache.xerces.internal.impl.dv.util.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Hashtable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.ModificationItem;
/**
* 用户登陆认证,LDAP跨域认证,通过LDAP对用户进行更新
*/
public class LdapUtil {
private static DirContext ctx;
// LDAP服务器端口默认为389
private static final String LDAP_URL = "ldap://test.demo.com:389";
// LDAP驱动
private static final String LDAP_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
/**** 测试 ****/
public static void main(String[] args) {
getLoginContext();
}
// 通过连接LDAP服务器对用户进行认证,返回LDAP对象
public static DirContext getLoginContext() {
String account = "demotest"; // 模拟用户名
String password = "12345678"; // 模拟密码
for (int i = 0; i < 5; i++) { // 验证次数
Hashtable env = new Hashtable();
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_CREDENTIALS, password);
env.put(Context.SECURITY_PRINCIPAL, "uid=" + account + ",cn=users,cn=accounts,dc=demo,dc=com");
env.put(Context.INITIAL_CONTEXT_FACTORY, LDAP_FACTORY);
env.put(Context.PROVIDER_URL, LDAP_URL);
// cn=属于哪个组织结构名称,ou=某个组织结构名称下等级位置编号
try {
// 连接LDAP进行认证
ctx = new InitialDirContext(env);
System.out.println("认证成功");
System.out.println("【" + account + "】用户登陆系统成功");
} catch (javax.naming.AuthenticationException e) {
System.out.println("认证失败");
} catch (NamingException err) {
System.out.println("--------->>【" + account + "】用户验证失败【" + i + "】次");
} catch (Exception e) {
System.out.println("认证出错:");
e.printStackTrace();
}
}
return ctx;
}
}
参考https://blog.csdn.net/u012411219/article/details/51331846