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. }  
时间: 2024-11-05 14:58:00

AD域的Java开发操作的相关文章

Java开发操作系统内核:实现进程的优先级切换

为了保护系统内核不受恶意程序的破坏,我们原来的做法是专门为应用程序分配单独使用的内存,使得应用程序对数据的读写都限制在内核给他分配的内存段内.程序对内存段的读写,完全是由DS寄存器指向的全局描述符决定的,如果恶意程序通过修改DS寄存器的值,使得它在运行时,让DS寄存器指向内核数据段的全局描述符,那么恶意程序就可以读写内核的数据了,为了防范出现这种情况,我们要做的是让应用程序没有读写段寄存器的权力,因此我们就必须设定应有程序的优先级. 在X86架构下,程序可以分为4个等级,分别是0,1,2,3.级

java操作AD域 jar包 标题要长长长

问题描述 java操作AD域 jar包 标题要长长长 java有没有操作AD域用的三方jar包啊 还是说现在只能用jndi? 哪位大婶有的给介绍一个啊

Java中利用jcifs集成AD域用户认证

最近一段时间发现AD这东西老火了,尤其是涉及到安全这一方面的,所以AD域用户认证成了现在网络安全方面的产品必备!这里就简单的分享一下,Java通过jcifs集成AD域用户实现认证,以实现网络安全! 我们通过一个demo来看看jcifs实现SSO,SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制.它是目前比较流行的企业业务整合的解决方案之一. 第一

使用java连接AD域,验证账号密码是否正确

web项目中有时候客户要求我们使用ad域进行身份确认,不再另外做一套用户管理系统.其实客户就是只要一套账号可以访问所有的OA,CRM等办公系统. 这就是第三方验证.一般有AD域,Ldap,Radius,邮件服务器等.最常用的要数AD域了.因为window系统在国内占据了大量的江山.做起来也很方便. 我这篇文章就是写,如何用java去实现AD域的身份验证.好了,直接看代码吧: package com.test; import java.util.Hashtable; import javax.na

java通过ldap修改ad域用户密码问题

问题描述 java通过ldap修改ad域用户密码问题 java通过ldap修改ad域用户密码问题.做过这个东西的朋友,我需要帮助. 解决方案 Java使用LdAP获取AD域用户用JAVA通过LDAP修改AD用户密码注意事项Java添加.修改MS AD用户密码

ad域-公司自搭的Exchange邮箱开发发送邮件功能时能否不带密码

问题描述 公司自搭的Exchange邮箱开发发送邮件功能时能否不带密码 公司自搭了Exchange邮箱服务,现在开发个应用,能够在AD域里边做认证,想请教各位如果通过AD域认证后能否不再需要密码才能发送邮件? 先谢过啦~~ 解决方案 可以,做成单点登录就行

使用java去读取AD域里面的用户名等信息。

问题描述 客户要求将AD域用户组的用户信息提取出来,保存到数据里去,在网上找了一些代码,发现问题蛮多的.请高手帮忙.这是我现在用的代码:publicstaticvoidmain(Stringargs[]){HashtableHashEnv=newHashtable();StringLDAP_URL="ldap://xxx.xxx.xxx.xxx:389";//LDAP访问地址StringadminName="Sun@domain.local";//注意用户名的写法:

C#操作AD域能获取对象,但是删除的时候拒绝访问!!

问题描述 我在客户服务器运行此方法,DirectoryEntryentry=_utils.GetADUserOfLogonName2(loginName);//这上面是根据登录名获取DirectoryEntry对象的方法,AD域的域名和管理员账户密码已经配置并且能正常访问,现在问题是entry这个对象已经获取到了,甚至entry.Properties["DisplayName"].Value等等他的属性都获取到了可是运行到红色部分,我想用代码将这个用户删除entry.DeleteTre

使用JAVA进行ad域身份验证常用属性详解

一些变态的公司经常对开发者提出一些变态的问题.比如在oa系统中,要求登录验证必须使用ad域进行登录.还有的如登录crm系统必须使用公司的阿里云邮箱账号进行身份验证等等. 作为程序员我们只能按照客户的需求进行完善系统.毕竟客户才是我们的衣食父母,没办法拒绝.我这里就列举一些,在系统中集成ad域身份验证的一些配置信息,并一一解释他们的作用. 直接看代码: public boolean login() { // 判断必填字段是否全部填写 if (StringUtils.isEmpty(this.use