正常情况下,JAVA修改AD域用户属性,只能修改一些普通属性,

如果要修改AD域用户密码和userAccountControl属性就得使用SSL连接的方式修改,

SSL连接的方式需要操作以下步骤:

1.安装AD域证书服务

2.证书颁发机构中设置以web的方式获取证书

3.访问http://localhost/certsrv/下载证书文件

4.将证书导入开发电脑的C:\tmp目录下,使用keytool -import -keystore命令

(以上步骤,在上一篇文章里介绍了https://www.cnblogs.com/amoyzhu/p/9259264.html)

5.写代码(注意端口是636)

package com.case.ldap;import java.util.ArrayList;
import java.util.List;
import java.util.Properties;import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.ModificationItem;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;import com.cts.spring.boot.Main.Person;/*** @Description:对AD域用户的增删改查操作* @author zhuyr* @date 2018-07-03*/
public class ADDUser {//DirContext dc = null;LdapContext dc = null;String root = "OU=maad,DC=case,DC=com"; // LDAP的根节点的DC/*** @Description:程序入口* @author zhuyr* @date 2018-07-03*/public static void main(String[] args) {ADDUser utils = new ADDUser();//0.用户连接//utils.init();//1.添加用户//utils.add("testzhu");//2.查找组织单位下的所有用户//utils.searchInformation(utils.root); //3.查找组织单位下的某个用户/*SearchResult sr = utils.searchByUserName(utils.root, "testzhu");System.out.println(sr.getName());*///4.修改用户属性//utils.modifyInformation("testzhu", "M1380005");//utils.updatePerson("testzhu");//5.重命名用户//utils.renameEntry("CN=testzhu,OU=maad,DC=case,DC=com", "CN=testzzz,OU=maad,DC=case,DC=com");//6.删除用户//utils.delete("CN=testzhu,OU=maad,DC=case,DC=com");utils.certinit();//7.修改密码失败//utils.updatePWD("testzhu");utils.enablePerson("testzhu");//utils.searchInformation(utils.root); utils.close();}/*** @Description:使用帐户密码登录* @author zhuyr* @date 2018-07-03*/public void init() {Properties env = new Properties();String adminName = "read-only-admin@case.com";// username@domainString adminPassword = "Root.123";// passwordString ldapURL = "ldap://172.16.160.7:389";// ip:portenv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");env.put(Context.SECURITY_AUTHENTICATION, "simple");//LDAP访问安全级别:"none","simple","strong"env.put(Context.SECURITY_PRINCIPAL, adminName);env.put(Context.SECURITY_CREDENTIALS, adminPassword);env.put(Context.PROVIDER_URL, ldapURL);try {dc = new InitialLdapContext(env, null);System.out.println("AD域帐户密码认证成功");} catch (Exception e) {System.out.println("AD域帐户密码认证失败");e.printStackTrace();}}/*** @Description:使用SSl的方式登录* @author zhuyr* @date 2018-07-03*/public void certinit() {Properties env = new Properties();String adminName = "cn=read-only-admin,cn=Users,dc=case,dc=com";String adminPassword = "Root.123";// passwordString ldapURL = "ldap://172.16.160.7:636";// ip:portenv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");env.put(Context.SECURITY_AUTHENTICATION, "simple");//LDAP访问安全级别:"none","simple","strong"env.put(Context.SECURITY_PRINCIPAL, adminName);env.put(Context.SECURITY_CREDENTIALS, adminPassword);env.put(Context.PROVIDER_URL, ldapURL);String keystore = "C:\\ProgramInstall\\Java\\jdk1.8.0_51\\jre\\lib\\security\\cacerts";System.setProperty("javax.net.ssl.trustStore", keystore);  env.put(Context.SECURITY_PROTOCOL, "ssl");try {dc = new InitialLdapContext(env, null);System.out.println("AD域ssl身份认证成功");} catch (Exception e) {System.out.println("AD域ssl身份认证失败");e.printStackTrace();}}/*** @Description:关闭AD域服务连接* @author zhuyr* @date 2018-07-03*/public void close() {if (dc != null) {try {dc.close();System.out.println("AD域服务连接关闭");} catch (NamingException e) {System.out.println("NamingException in close():" + e);}}}/*** @Description:新增AD域用户* @author zhuyr* @date 2018-07-03*/public void add(String newUserName) {try {Attributes attrs = new BasicAttributes(true);attrs.put("objectClass", "user");attrs.put("samAccountName", newUserName);attrs.put("userPrincipalName", newUserName + "@mayocase.com");//attrs.put("userAccountControl","66048"); //attrs.put("userPassword","Root.123");attrs.put("telephoneNumber","15880277368");attrs.put("displayName", "显示名称");attrs.put("description","描述");attrs.put("mail",newUserName + "@case.com");attrs.put("givenName","名字");attrs.put("name","newUserName");attrs.put("cn", newUserName);attrs.put("sn", newUserName);dc.createSubcontext("CN=" + newUserName + "," + root, attrs);System.out.println("新增AD域用户成功:" + newUserName);} catch (Exception e) {e.printStackTrace();System.out.println("新增AD域用户失败:" + newUserName);}}/*** @Description:删除AD域用户* @author zhuyr* @date 2018-07-03*/public void delete(String dn) {try {dc.destroySubcontext(dn);System.out.println("删除AD域用户成功:" + dn);} catch (Exception e) {System.out.println("删除AD域用户失败:" + dn);e.printStackTrace();}}/*** @Description:重命名AD域用户* @author zhuyr* @date 2018-07-03*/public boolean renameEntry(String oldDN, String newDN) {try {dc.rename(oldDN, newDN);System.out.println("重命名AD域用户成功");return true;} catch (NamingException ne) {System.out.println("重命名AD域用户失败");ne.printStackTrace();return false;}}    /*** @Description:修改AD域用户属性* @author zhuyr* @date 2018-07-03*/public void updatePerson(String dn) {Person person = new Person();      person.setCn("testzhu");person.setsAMAccountName(person.getCn());person.setName(person.getCn());person.setSn("3");person.setUserAccountControl("66048");person.setTelephoneNumber("18506999958");person.setGivenName("33");person.setDescription("3333");person.setDisplayName("333");person.setMail("testzhu@case.com");person.setUserPassword("Root.123");if (person == null || person.getCn() == null || person.getCn().length() <= 0) {return;}//修改的属性List<ModificationItem> mList = new ArrayList<ModificationItem>();//不能修改//mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("userAccountControl", person.getUserAccountControl())));mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("sn",person.getSn())));mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("telephoneNumber", person.getTelephoneNumber())));mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("mail", person.getMail())));mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("givenName", person.getGivenName())));mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("displayName", person.getDisplayName())));mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("description", person.getDescription())));if (mList.size() > 0) {//集合转为数组ModificationItem[] mArray = new ModificationItem[mList.size()];for (int i = 0; i < mList.size(); i++) {mArray[i] = mList.get(i);}try {dc.modifyAttributes("cn="+dn + "," + root, mArray);System.out.println("修改AD域用户属性成功");} catch (NamingException e) {System.err.println("修改AD域用户属性失败");e.printStackTrace();}}                }/*** @Description:修改AD域用户密码* @author zhuyr* @date 2018-07-03*/public void updatePWD(String dn) {Person person = new Person();   person.setCn("testzhu");person.setUserPassword("Root.456");String sOldPassword ="Root.123";if (person == null || person.getCn() == null || person.getCn().length() <= 0) {return;}try {String oldQuotedPassword = "\"" + sOldPassword + "\"";  byte[] oldUnicodePassword = oldQuotedPassword.getBytes("UTF-16LE"); String newQuotedPassword = "\"" + person.getUserPassword() + "\"";byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");ModificationItem[] mods = new ModificationItem[2];//mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("unicodePwd", newUnicodePassword));mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new BasicAttribute("unicodePwd", oldUnicodePassword));  //userPasswordmods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("unicodePwd", newUnicodePassword));  dc.modifyAttributes("cn="+dn + "," + root, mods);System.out.println("修改密码成功!");}catch(Exception e) {e.printStackTrace();}}/*** @Description:修改AD域用户属性* @author zhuyr* @date 2018-07-03*/public void enablePerson(String dn) {Person person = new Person();   person.setCn("testzhu");person.setUserAccountControl("66048");if (person == null || person.getCn() == null || person.getCn().length() <= 0) {return;}try {ModificationItem[] mods = new ModificationItem[1]; mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("userAccountControl", person.getUserAccountControl()));dc.modifyAttributes("cn="+dn + "," + root, mods);System.out.println("启用用户成功!");}catch(Exception e) {e.printStackTrace();}}/*** @Description:搜索指定节点下的所有AD域用户* @author zhuyr* @date 2018-07-03*/public void searchInformation(String searchBase) {try {SearchControls searchCtls = new SearchControls();searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);String searchFilter = "objectClass=user";String returnedAtts[] = { "memberOf" };searchCtls.setReturningAttributes(returnedAtts);NamingEnumeration<SearchResult> answer = dc.search(searchBase, searchFilter, searchCtls);while (answer.hasMoreElements()) {SearchResult sr = (SearchResult) answer.next();System.out.println(sr.getName());}} catch (Exception e) {e.printStackTrace();}}/*** @Description:指定搜索节点搜索指定域用户* @author zhuyr* @date 2018-07-03*/public SearchResult searchByUserName(String searchBase, String userName) {SearchControls searchCtls = new SearchControls();searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);String searchFilter = "sAMAccountName=" + userName;String returnedAtts[] = { "memberOf" }; //定制返回属性searchCtls.setReturningAttributes(returnedAtts); //设置返回属性集try {NamingEnumeration<SearchResult> answer = dc.search(searchBase, searchFilter, searchCtls);return answer.next();} catch (Exception e) {System.err.println("指定搜索节点搜索指定域用户失败");e.printStackTrace();}return null;}
}

  

转载于:https://www.cnblogs.com/amoyzhu/p/9261844.html

java修改AD域用户密码使用SSL连接方式相关推荐

  1. 【转】SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

    前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真正的大型项目中经受住了考验:.Net版SAP RFC适配器组件和SharePoint 2013修改AD ...

  2. SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

    转:http://www.cnblogs.com/nbpowerboy/p/3355943.html 前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真 ...

  3. AD 域服务简介(二)- Java 获取 AD 域用户

    博客地址:http://www.moonxy.com 关于AD 域服务器搭建及其使用,请参阅:AD 域服务简介(一) - 基于 LDAP 的 AD 域服务器搭建及其使用 一.前言 先简单简单回顾上一篇 ...

  4. AD域用户密码过期-用户如何实现AD域密码自助修改或重置?

    工作中我们经常会遇到AD域密码过期的情况,由于没有及时对AD域密码进行修改导致AD域密码过期,用户不能登录.AD域密码为什么会过期呢?这与IT管理员的AD域密码策略有关.为了防止恶意者进行密码攻击,I ...

  5. AD域用户密码重置_AD域自助管理之道

    AD域管理一直以来都是企业IT管理员的一项重要工作之一.不过,IT管理员面临一些AD域用户管理问题时仍无法高效妥善处理.例如,由于域内执行密码策略,大量用户没有及时更改密码导致大量用户密码过期.管理员 ...

  6. 关于批量修改AD域用户的脚本

    最近几天帮人弄了个脚本,是修改域用户属性的脚本,今天看到徐火军写的 关于批量修改用户属性 脚本,觉得有必要把我的成果分享给大家.什么都不说了,上脚本: Dim oFSO, oTF, i Dim sLi ...

  7. powershell批量修改AD域用户UPN后缀

    (1)需求:一客户云端365有多个域名,想要本地用户同步到云端就要修改用户UPN后缀(没有根据OU划分,不是一个OU对应一个域名),根据实际情况,用户的邮件地址是和云端同步的,因此解决方案为根据用户的 ...

  8. JAVA修改AD账号密码

    JAVA修改AD账号密码 今天正好做了这块,拿出来分享.以前在网上找到的都无法实现.代码内容不太规范,只是一个测试的用例 有什么问题可以联系我QQ:305493325. 一.生成JKS文件 1.下载A ...

  9. 2012服务器修改域用户密码,Windows Server 2012 R2 如何修改域用户密码

    1.在Windows Server 2003上,操作系统默认提供了一种修改域用户密码的方式 2.在Windows Server 2008上,可以提取Windows Server 2003上的代码来实现 ...

最新文章

  1. java file_Java IO: File
  2. opencv std::vectorcv:Mat
  3. 【TensorFlow2.0】数据读取与使用方式
  4. Python__random库基本介绍
  5. wxWidgets:wxLayoutAlgorithm类用法
  6. Bean的scope属性
  7. leetcode 649. Dota2 参议院(贪心算法)
  8. python输出引号内的变量值_引号中的Python变量值
  9. linux利用内存加快读盘速度,Linux性能优化从入门到实战:10 内存篇:如何利用Buffer和Cache优化程序的运行效率?...
  10. 用spring的InitializingBean的afterPropertiesSet来初始化
  11. 如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全?(转)
  12. Introduction to Computer Networking学习笔记(十五):End to End Delay 端对端延迟
  13. rost反剽窃检测系统_剽窃上瘾了?该戒戒了
  14. 2018acm编程大赛题目c语言,编程竞赛题(超牛题目,留下做研究).doc
  15. 台湾骑行环岛攻略(转)
  16. 汽车CAN总线 CAN2.0
  17. 怎么把淘宝宝贝分享到微信朋友圈
  18. Environment Mapping
  19. 好用的在线画图工具processon
  20. (个人)AR电子书系统创新实训第一周(1)

热门文章

  1. C语言课设销售管理系统设计(大作业)
  2. 京东商智--POP店铺数据导出(每一个类目,每一个月份的数据)--本次为了汇总2019年度数据
  3. QML笔记:QML基本概念及使用
  4. JS——事件冒泡机制
  5. 【WAF】雷池安装及使用体验
  6. 订单量增长70倍!钉钉正在企业级市场复制苹果的“应用经济”
  7. 虚拟机虚拟化引擎选择哪个好_如何选择合适的虚拟现实开发引擎
  8. 为什么智慧路灯杆适合挂载5G微基站
  9. 0916文件上传-基础及过滤方式
  10. Tomcat启动闪退解决