AD域的Java开发操作

简介:
  1. import java.util.ArrayList;  
  2. import java.util.HashMap;  
  3. import java.util.Hashtable;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6. import javax.naming.Context;  
  7. import javax.naming.NamingEnumeration;  
  8. import javax.naming.directory.Attributes;  
  9. import javax.naming.directory.SearchControls;  
  10. import javax.naming.directory.SearchResult;  
  11. import javax.naming.ldap.InitialLdapContext;  
  12. import javax.naming.ldap.LdapContext;  
  13.   
  14. /** 
  15.  * LDAP 连接 
  16.  */  
  17. public class LDAPConnection {  
  18.   
  19.     private String baseDN;  
  20.     private String filter;  
  21.     private String[] attributes;  
  22.     private Hashtable<String, String> env = null;  
  23.   
  24.     private static LDAPConnection lc;  
  25.   
  26.     private LDAPConnection() {  
  27.   
  28.         //搜索根节点  
  29.         baseDN = "******";  
  30.         //要查询的属性列  
  31.         attributes = new String[]{"cn"};  
  32.         //过滤条件  
  33.         if ((filter == null) || (filter == ""))  
  34.             filter = "objectclass=*";  
  35.     }  
  36.   
  37.     public static LDAPConnection getInstance() {  
  38.         if (lc == null) {  
  39.             lc = new LDAPConnection();  
  40.         }  
  41.         return lc;  
  42.     }  
  43.   
  44.     /** 
  45.      * 建立LDAP连接 
  46.      * @return boolean 
  47.      */  
  48.     private LdapContext getLdapContext() {  
  49.         env = new Hashtable<String, String>();  
  50.         env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");  
  51.         env.put(Context.PROVIDER_URL, "ldap://*****:389");  
  52.         env.put(Context.SECURITY_AUTHENTICATION, "simple");  
  53.         env.put(Context.SECURITY_CREDENTIALS, "123456");  
  54.         env.put(Context.SECURITY_PRINCIPAL, "****");  
  55.         try {  
  56.             return new InitialLdapContext(env, null);  
  57.         } catch (Exception e) {  
  58.             System.out.println("连接服务器失败!");  
  59.             e.printStackTrace();  
  60.         }  
  61.         return null;  
  62.     }  
  63.     /**  
  64.      * 获取用户信息  
  65.      * @return List<Map>  
  66.      */  
  67.     public List<Map> getUsers() {  
  68.           
  69.         LdapContext ctx = getLdapContext();  
  70.         if(ctx == null){  
  71.             return null;  
  72.         }  
  73.         List<Map> list = new ArrayList<Map>();  
  74.         try {  
  75.             SearchControls constraints = new SearchControls();  
  76.             constraints.setReturningAttributes(attributes);  
  77.             constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);  
  78.             NamingEnumeration<?> en = ctx.search(baseDN, filter, constraints);  
  79.   
  80.             while (en != null && en.hasMoreElements()) {  
  81.                 Object obj = en.nextElement();  
  82.                 if (obj instanceof SearchResult) {  
  83.   
  84.                     SearchResult si = (SearchResult) obj;  
  85.   
  86.                     Attributes attrs = si.getAttributes();  
  87.                     Map<String, Object> map = new HashMap<String, Object>();  
  88.                     for (int i = 0; i < attributes.length; i++) {  
  89.                         String attributeName = attributes[i];  
  90.   
  91.                         if(attrs.get(attributeName) == null){  
  92.                             map.put(attributeName, attrs.get(attributeName));  
  93.                         }else{  
  94.                             map.put(attributeName, attrs.get(attributeName).get());  
  95.                         }  
  96.                     }  
  97.                     System.out.println(map);  
  98.                     list.add(map);  
  99.                 } else {  
  100.                     System.out.println(obj);  
  101.                 }  
  102.             }  
  103.         } catch (Exception e) {  
  104.             e.printStackTrace();  
  105.         }  
  106.         System.out.println("总符合条件记录数:"+list.size());  
  107.         return list;  
  108.     }  
  109.   
  110.     public static void main(String arg[]) {  
  111.         LDAPConnection.getInstance().getUsers();  
  112.     }  
  113.   
  114. }  
相关文章
|
19天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
1月前
JavaWeb 开发之 ServletContext 的和使用
JavaWeb 开发之 ServletContext 的和使用
22 1
|
4天前
|
IDE Java 数据库连接
使用 Java 进行桌面应用开发
【4月更文挑战第19天】Java 是一款广泛应用于企业级、网络和桌面应用开发的编程语言。其跨平台特性使Java程序能在不同操作系统上运行,而JDK提供了开发所需工具和库。使用Swing等GUI库构建用户界面,结合JDBC进行数据库操作,Socket实现网络通信。虽然面临性能和用户体验的挑战,但通过优化和选用合适的IDE,Java仍能开发出高效稳定的桌面应用。
|
5天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
5天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
34 10
|
5天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
12天前
|
运维 NoSQL 算法
Java开发-深入理解Redis Cluster的工作原理
综上所述,Redis Cluster通过数据分片、节点发现、主从复制、数据迁移、故障检测和客户端路由等机制,实现了一个分布式的、高可用的Redis解决方案。它允许数据分布在多个节点上,提供了自动故障转移和读写分离的功能,适用于需要大规模、高性能、高可用性的应用场景。
16 0
|
14天前
|
人工智能 小程序 Java
JAVA开发智慧学校系统源码+人脸电子班牌布局
智慧校园是通过利用物联网,大数据技术来改变师生和校园资源相互交互的方式,以便提高交互的明确性、灵活性和响应速度,从而实现智慧化服务和管理的校园模式。
|
17天前
|
安全 前端开发 Java
Java Web开发知识点学习总结
Java Web开发涉及Java基础、Servlet、JSP、数据库操作(SQL+JDBC)、MVC设计模式、Spring框架、Hibernate ORM、Web服务(SOAP&RESTful)、安全认证(HTTP Basic/Digest/OAuth)及性能优化(缓存、异步、负载均衡)。
16 3
|
20天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。

热门文章

最新文章