Ldap登陆AD(Active Directory)进行认证的Java示例
2023-09-11 14:16:42 时间
原文地址:http://hi.baidu.com/js2007/item/24efbb0fae1c9b90a3df432a
package LdapTest; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.AuthenticationException; 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; public class AuthenticationTest { private String BASE_DN ="dc=statestreet,dc=com"; // private DirContext ctx = null; private LdapContext ctx = null; private Hashtable env = null; private Control[] connCtls = null; private void LdapConnect(){ env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=statestreet,dc=com"); env.put(Context.SECURITY_CREDENTIALS, "****"); //自己填入 try{ ctx = new InitialLdapContext(env,connCtls); // ctx = new InitialDirContext(env); System.out.println("Login Ldap Server Successful..."); }catch(AuthenticationException e){ System.out.println("Login Ldap Server Failed..."); e.printStackTrace(); }catch(Exception e){ System.out.println("Login Ldap Server Wrong...\n "+e.toString()); } } private String getUserDN(String userid){ String userDN=""; try{ SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration en = ctx.search("","uid="+userid,constraints); if(en == null){ System.out.println("Have NO such user!"); } if(!en.hasMoreElements()){ System.out.println("Have NO such user!"); } while (en != null && en.hasMoreElements()){ Object obj = en.nextElement(); if(obj instanceof SearchResult){ SearchResult si = (SearchResult) obj; userDN += si.getName(); userDN += "," + BASE_DN; } else{ System.out.println(obj); } } }catch(Exception e){ System.out.println("Exception in search user DN : "+e.toString()); } return userDN; } public boolean Authenricate(String ID,String pwd){ LdapConnect(); boolean valide = false; String userDN = getUserDN(ID); if(userDN=="") return valide; try { ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,userDN); ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,pwd); ctx.reconnect(connCtls); System.out.println(userDN + " is authenticated! "); valide = true; }catch (AuthenticationException e) { System.out.println(userDN + " is NOT authenticated! "); valide = false; }catch (NamingException e) { System.out.println(userDN + " is NOT authenticated! "); valide = false; } LdapDisconnect(); return valide; } private void LdapDisconnect(){ if (ctx != null) { try { ctx.close(); } catch (NamingException e) { e.printStackTrace(); } } } }
相关文章
- java虚拟机学习-Java常量池理解与总结(13-2)
- 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现)
- Java 并发工具包 java.util.concurrent 用户指南
- Java反射机制详解(3) -java的反射和代理实现IOC模式 模拟spring
- Word处理控件Aspose.Words功能演示:在 Java 中将 DOC 或 DOCX 转换为 PNG
- Java程序猿面试体会,还没找到工作的“猿猿们”看过来!
- 回归JAVA: java文件编译后,出现xx$1.class的原因
- java泛型 8 泛型的内部原理:类型擦除以及类型擦除带来的问题
- Java Design Demo -简单的队列-异步多任务队列(java android)
- Java_java动态编译整个项目,解决jar包找不到问题
- 浅析Java对集合进行操作时报java.util.ConcurrentModificationException并发修改异常问题:产生原因、单线程/多线程环境解决、CopyOnWriteArrayList线程安全的ArrayList、fail-fast快速失败机制防止多线程修改集合造成并发问题
- Java中的继承——详解
- Java操作Mongodb 保存/读取java对象到/从mongodb
- java socket解析和发送二进制报文工具(附java和C++转化问题)
- JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)
- Java 序列化Serializable具体解释(附具体样例)
- 代码重构----使用java有限状态机来消除太多的if else判断
- Java中Class对象详述
- Java生成骑缝章带有CA电子签名认证