2019独角兽企业重金招聘Python工程师标准>>>

登陆域,在网上很多

public static boolean loginAD(String adName, String adPwd){boolean flag = false;if(StrKit.notBlank(adName)&& StrKit.notBlank(adPwd) && adName.contains("@")){Properties env = new Properties();String adminName = adName;// username@domainString adminPassword = adPwd;// password//String ldapURL = "LDAP://" + PropKit.get("ldapURL");// ip:portString ldapURL = null;try {ldapURL = "LDAP://" + InetAddress.getByName(adminName.split("@")[1]).getHostAddress();} catch (UnknownHostException e) {System.err.println("对域名解析IP失败,可能原因:您未配置DNS...");e.printStackTrace();return false;}env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");env.put(Context.SECURITY_AUTHENTICATION, "simple");// "none","simple","strong"env.put(Context.SECURITY_PRINCIPAL, adminName);env.put(Context.SECURITY_CREDENTIALS, adminPassword);env.put(Context.PROVIDER_URL, ldapURL);LdapContext ctx = null;try {ctx = new InitialLdapContext(env, null);// 初始化上下文flag = true;System.err.println("身份验证成功!");} catch (AuthenticationException e) {System.err.println("身份验证失败!");e.printStackTrace();} catch (javax.naming.CommunicationException e) {System.err.println("AD域连接失败!");e.printStackTrace();} catch (Exception e) {System.err.println("身份验证未知异常!");e.printStackTrace();} finally{if(null!=ctx){try {ctx.close();ctx=null;} catch (Exception e) {e.printStackTrace();}}}}return flag;}/**根据域名 解析节点* @param adName* @return*/private static String searchBase(String adName) {String searchBase = "";String[] split = adName.split("@");String domain = split[1];String[] dc = domain.split("\\.");for (int i = 0; i < dc.length; i++) {searchBase += "DC=" + dc[i] + ",";}return searchBase.substring(0, searchBase.length() - 1);}

详细解释下search方法

第一个参数:

String

域名入口,比如说你要登陆查询的域是:test.com,那查询节点是 “DC=test,DC=com”

第二个参数:

String

过滤器,筛选,列几个简单的

所有用户: (&(objectCategory=person)(objectClass=user))

用户"zhangsan": (&(objectCategory=person)(objectClass=user)(name=zhangsan))

多个用户"zhangsan","lisi": (&(objectCategory=person)(objectClass=user)(|(name=zhangsan)(name=lisi)))

所有组织单位:objectclass=organizationalUnit

指定的组织单位:(&(objectclass=organizationalUnit)(|(name=3级单位1_1)(name=研发部)))

更多的看这里http://www.cnblogs.com/dreamer-fish/p/5832735.html 侵删

第三个参数:

SearchControls

要查询的字段,用法

new SearchControls().setReturningAttributes(要查询的字段,给null是返回所有查询到的字段);

下面例子是查询指定的组织单位的小栗子

  /**根据数据库,域同步表:DomainSynchronization中,要同步的部门, 查出这些域* @param adName 连接帐号* @param adPwd 连接密码* @param depts 要同步的域* @return*/public static HashMap<String, Object> findSynchronizationDomainDept(String adName, String adPwd, String[] depts){HashMap<String, Object> ret = new HashMap<>();boolean flag = false;if(StrKit.isBlank(adName) || StrKit.isBlank(adPwd) || !adName.contains("@")){ret.put("flag", flag);ret.put("msg", "帐号或密码为空,或帐号格式不正确");return ret;}Properties env = new Properties();String ldapURL;try {ldapURL = "LDAP://" + InetAddress.getByName(adName.split("@")[1]).getHostAddress();} catch (UnknownHostException e) {ret.put("flag", flag);ret.put("msg", adName.split("@")[1]+"域名解析失败,可能您未配置DNS");return ret;}env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");// 三种身份认证模式:"none","simple","strong",env.put(Context.SECURITY_AUTHENTICATION, "simple");env.put(Context.SECURITY_PRINCIPAL, adName);env.put(Context.SECURITY_CREDENTIALS, adPwd);env.put(Context.PROVIDER_URL, ldapURL);LdapContext ctx = null;try {ctx = new InitialLdapContext(env, null);// 初始化上下文SearchControls searchCtls = new SearchControls();searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);//过滤器 组织单位String searchFilter = "(&(objectclass=organizationalUnit)(|(name=3级单位1_1)(name=研发部)))";//name:部门名称,OU:部门结构,managedby:管理员名称和所在位置结构,distinguishedname:当前部门结构String returnedAtts[] = { "name","OU","managedby","distinguishedname" };searchCtls.setReturningAttributes(returnedAtts);
//          searchCtls.setReturningAttributes(null); // 不定制属性,将返回所有的属性集String searchBase = searchBase(adName);NamingEnumeration<SearchResult> answer = ctx.search(searchBase, searchFilter, searchCtls);ArrayList<HashMap<String, Object>> list = new ArrayList<>();while (answer.hasMoreElements()) {HashMap<String, Object> map = new HashMap<>();SearchResult sr = (SearchResult) answer.next();Attributes attributes = sr.getAttributes();String name = (String) attributes.get("name").get();if("Domain Controllers".equals(name)) continue;String ds = (String) attributes.get("distinguishedname").get();String[] split = ds.split("\\,");int num = 0;for (int i = 0; i < split.length; i++) {if(split[i].startsWith("OU=")) num++;}map.put("parent_distinguishedname", "");if(num>1){map.put("parent_distinguishedname", ds.substring(ds.indexOf(",")+1));}map.put("group_level", num);map.put("name", (String) attributes.get("name").get());map.put("managedby", attributes.get("managedby")==null?null:attributes.get("managedby").get());map.put("OU", (String) attributes.get("OU").get());map.put("distinguishedname", (String) attributes.get("distinguishedname").get());//查找子部门list.add(map);
//              String id = attributes.get("distinguishedname").getID();
//              NamingEnumeration<?> all = attributes.get("distinguishedname").getAll();System.out.println(list.toString());}ret.put("list",list);flag = true;} catch (AuthenticationException e) {ret.put("msg", "身份验证失败");} catch (javax.naming.CommunicationException e) {ret.put("msg", "AD域连接失败");e.printStackTrace();} catch (Exception e) {ret.put("msg", "身份验证未知异常");e.printStackTrace();} finally{if(ctx!=null){try {ctx.close();} catch (NamingException e) {System.err.println("--------------ad域链接 LdapContext未正常关闭!");}}}ret.put("flag", flag);return ret;}/**根据域名 解析节点* @param adName* @return*/private static String searchBase(String adName) {String searchBase = "";String[] split = adName.split("@");String domain = split[1];String[] dc = domain.split("\\.");for (int i = 0; i < dc.length; i++) {searchBase += "DC=" + dc[i] + ",";}return searchBase.substring(0, searchBase.length() - 1);}

转载于:https://my.oschina.net/jiangqw/blog/818896

java ldap 登陆AD域 查找某个帐号 查找某个组织单位相关推荐

  1. ad域控查看ldap端口命令_工作笔记(一)LDAP和AD介绍以及使用LDAP操作AD域

    1. LDAP入门 1.1 定义 LDAP是轻量目录访问协议(LightweightDirectory Access Protocol)的缩写,LDAP标准实际上是在X.500标准基础上产生的一个简化 ...

  2. linux nslcd服务,CentOS 6通过ldap集成AD域账号(nslcd方式)

    CentOS 6通过ldap集成AD域账号(nslcd方式): yum install nss-pam-ldapd(rpm -qa nss-pam-ldapd,rpm -ql nss-pam-ldap ...

  3. libnss mysql_Ubuntu通过LDAP集成AD域账号登录(libnss-ldap方式)

    Ubuntu通过LDAP集成AD域账号登录(libnss-ldap方式): # apt-get install libnss-ldap   (中间直接回车,忽略) # vi /etc/nsswitch ...

  4. Bundles实现 LDAP操作 AD 域

    一 . LDAP 和 AD 背景介绍 LDAP 是 一个 轻量目录协议 ,全名 Lightweight Directory Access Protocol , 他用于发布目录信息到许多不同资源的协议 ...

  5. java web 项目如何获取客户端登录帐号信息(用于SSO或其他)

    前言 在java 中可以通过System 获取操作系统的相关信息. 类似: String sys_user_name = System.getProperty("user.name" ...

  6. 登陆163邮箱 验证邮箱帐号密码是否正确

    有些时候我们只需要验证邮箱的帐号密码是否正确.而不需要发邮件.用下面的代码吧. 要用到的jar包是jmail.jar  方法1 package com.cn.mail.test; import jav ...

  7. 如何从路由器中查找ADSL帐号 [2007年4月13日]

    今天去取自己接手维护的一家店面维护网络,需要查看路由器的信息和接手那里的ADSL帐号.但是非常让我郁闷的是那里的网管吧ADSL帐号忘记了,虽然我可以通过路由器的用户名登录进去看到帐号,但是不知道密码也 ...

  8. java异地登录 怎么解决_同一帐号异地登录

    在此之前也看了很多同一帐号异地登录的,有的是采用后登录者必须等待前登录者释放后才可以登录,我的项目中要用到想qq那样可以踢出,我具体的做法如下: LoginServelt.java 做登录使用 Onl ...

  9. 域中某个帐号老是被锁定

     1.在DC上开审核,然后在安全事件日志上看失败的审核,是从那来的 2.安装Windows Update.安装防毒软件扫毒.扫木马 审核中,你要打开失败审核的功能,然后再事件日志中,去过滤,只查看 ...

最新文章

  1. 管理者和领导者有哪些区别?
  2. OpenStack 界面开发中的排序问题
  3. JS报错:require is not defined
  4. CodeArt WSS3.0(MOSS)字段编辑权限控制解决方案(v1.0)
  5. 从零开始在 Windows 上部署 .NET Core 到 Kubernetes
  6. 百度爬虫页面自动繁殖程序+教程自动SEO优化
  7. 【GDSOI2019】滑稽二乘法【数据结构】【LCT】
  8. 蓝桥杯java龟兔赛跑_蓝桥杯 1476: [蓝桥杯][基础练习VIP]龟兔赛跑预测
  9. 美团百度联合布局无人驾驶外卖;高通裁员千人;英特尔关闭可穿戴业务 | CSDN极客头条...
  10. mysql高可用方案之主从架构(master-slave)
  11. vue2.0和better-scroll实现左右联动效果
  12. html网页做一个打字小游戏,原生js实现的金山打字小游戏(实例代码详解)
  13. 5G承载网需求与技术实现
  14. MybatisPlus IPage<V>转IPage<B> 封装工具类
  15. BAT等互联网公司薪资分享
  16. CRM客户信息管理系统
  17. IDEA中出现Connection refused: connect问题的解决方法
  18. 2023年上海大学文物与博物馆考研上岸前辈初复试备考经验指导
  19. ADS 2023 下载链接
  20. 试水VISA编程(2)——一键读取示波器数据

热门文章

  1. MapReduce中Client提交Job源码分析
  2. swift_028(Swift 的协议)
  3. Scala-高阶函数
  4. linux 和windows 下golang安装
  5. TaskWarrior windows版制作
  6. day002-HTML知识点总结:浏览器兼容性之指定IE浏览器使用chrome内核渲染页面
  7. java时间计算,获取某月第一天和最后一天
  8. Ubuntu终端字体颜色方案
  9. 练习一下linux中的list函数。
  10. 白领丽人减肥四大注意 - 生活至上,美容至尚!