1. 程式人生 > >Java新增、修改MS AD使用者密碼

Java新增、修改MS AD使用者密碼

最近研究了下在AD中如何新增和修改使用者密碼。AD中修改密碼一定要通過SSL或TLS才可以進行修改,這是MS硬性規定的,這就造成了還要做很多其它方面的配置工作,很麻煩,不過想想也合理,傳輸密碼不加密被截獲了也就完了。
前期要做的工作基本就是安裝CA,獲取證書,繫結keystore等等,過幾天會詳細寫一下這幾步的操作,現在先貼出程式碼。
import java.io.UnsupportedEncodingException;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
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;

public class OpAD{

 private LdapContext ctx = null;

 private String adminpassword = "password";

 private String keystore = "C:/testca.keystore";

 private String keyPassword = "changeit";

 private String searchBase = "DC=testad,DC=com";

 private String returnedAtts[] = { "distinguishedName" };

 private boolean initial_Ldap() {

  Hashtable env = new Hashtable();
  System.setProperty("javax.net.ssl.trustStore", keystore);
  System.setProperty("javax.net.ssl.trustStorePassword", keyPassword);
  env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
  env.put(Context.SECURITY_AUTHENTICATION, "simple");
  env.put(Context.SECURITY_PRINCIPAL, adminName);
  env.put(Context.SECURITY_CREDENTIALS, adminpassword);
  env.put(Context.SECURITY_PROTOCOL, "ssl");
  env.put(Context.PROVIDER_URL, ldapURL);

  try {
   System.out.println("Start InitialLdapContext");
   ctx = new InitialLdapContext(env, null);
   System.out.println("InitialLdapContext succeed");
  } catch (NamingException e) {
   System.out.println("Problem initial_Ldap NamingException: " + e);
   return false;
  }

  return true;
 }

 private boolean close_Ldap() {
  System.out.println("Close Ldap");
  try {
   ctx.close();
  } catch (NamingException e) {
   System.out.println("Problem close_Ldap NamingException: " + e);
   return false;
  }
  return true;
 }

 private String search_distinguishedName(String username) {
  String searchFilter = "(&(objectClass=user)(cn=" + username + "))";

  try {
   System.out.println("Start search " + username + "'s distinguishedName");
   SearchControls searchCtls = new SearchControls();
   searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
   searchCtls.setReturningAttributes(returnedAtts);
   NamingEnumeration answer = ctx.search(searchBase, searchFilter,
     searchCtls);
   if (answer.hasMoreElements()) {
    SearchResult sr = (SearchResult) answer.next();
    Attributes attrs = sr.getAttributes();
    if (attrs != null) {
     NamingEnumeration ae = attrs.getAll();
     Attribute attr = (Attribute) ae.next();
     NamingEnumeration e = attr.getAll();
     return (String) e.next();
    }
   }
  } catch (NamingException e) {
   System.out
     .println("Problem search_distinguishedName NamingException: " + e);
   return "error";
  }

  return "none";
 }

 private boolean mod_Pwd(String username, String password) {
  ModificationItem[] mods = new ModificationItem[1];
  String newQuotedPassword = "/"" + password + "/"";

  try {
   System.out.println("Start reset password");
   byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");
   mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
     new BasicAttribute("unicodePwd", newUnicodePassword));
   ctx.modifyAttributes(username, mods);
   System.out.println("Finish reset password" + username);
  } catch (UnsupportedEncodingException e) {
   System.out.println("Problem mod_Pwd UnsupportedEncodingException: " + e);
   return false;
  } catch (NamingException e) {
   System.out.println("Problem mod_Pwd NamingException: " + e);
   return false;
  }

  return true;
 }

 public static void main(String args[]) {
  OpAD inst = new OpAD();
  inst.initial_Ldap();
  String username = inst.search_distinguishedName("testuser"); 
  inst.mod_Pwd(username, "1234AbcD");
  inst.close_Ldap();
  
 }

}
 

相關推薦

Java新增修改MS AD使用者密碼

最近研究了下在AD中如何新增和修改使用者密碼。AD中修改密碼一定要通過SSL或TLS才可以進行修改,這是MS硬性規定的,這就造成了還要做很多其它方面的配置工作,很麻煩,不過想想也合理,傳輸密碼不加密被截獲了也就完了。前期要做的工作基本就是安裝CA,獲取證書,繫結keystor

JAVA通過SSL修改MS AD賬戶密碼

java通過ssl修改ms ad賬戶密碼JAVA通過SSL修改MS AD賬戶密碼我們上一篇文章介紹了JAVA通過SSL創建MS AD賬戶及設置密碼,今天我們主要介紹JAVA通過SSL修改MS AD賬戶密碼,關於證書介紹,我們上一篇已經介紹了,所以直接進入重點,上代碼我們準備修改上一篇介紹時創建的gaowenl

Java 新增修改讀取刪除PPT備註

概述 幻燈片中的備註資訊是隻提供給幻燈片演講者觀看的特定內容,在演講者放映幻燈片時,備註資訊可給演講者提供講解思路,起到輔助講解的作用。本文將通過Java程式來演示如何操作PPT幻燈片中的備註資訊,要點包括: 新增備註資訊 修改備註資訊 讀取備註資訊 刪除備註資訊   使用工具 Free Sp

Java 新增修改讀取複製刪除Excel批註

本文介紹通過Java程式來操作Excel批註的方法。操作內容包括批註新增(新增批註文字、背景色、字型、自適應等)、修改、讀取(文字、圖片)、複製、刪除等。   工具:Free Spire.XLS for Java (免費版) 注:Jar檔案獲取可通過官網下載包,並解壓將lib資料夾下的jar檔案匯入

Java 新增回覆修改(替換)刪除Word批註

批註是一種常用於對特定文件內容進行註解的工具或方法,起到解釋說明、標記指正的作用。在本篇文章中,將介紹如何操作Word批註的方法,包括: 1. 新增批註:新增文字到批註、插入圖片到批註; 2. 回覆批註; 3. 修改或替換批註:用文字替換批註中的文字內容、用文字替換批註中的圖片、用圖片替換批註中的圖片; 4.

oracle 新增修改 刪除字段

div sql 同時 one value 得到 rename 創建表 num 添加字段的語法:alter table tablename add (column datatype [default value][null/not null],….); 修改字段的語法:alt

HTML5 history.pushState()和history.replaceState()新增修改歷史記錄用法介紹

body popu spa htm 動作 使用 lang scrip null 抽空研究了下這兩個新方法,確實可以解決很多問題 1、使用pushState()方法 可以控制瀏覽器自帶的返回按鈕: 有時候我們想讓用戶點擊瀏覽器返回按鈕時,不返回,或執行其他操作,這時,

oracle 資料庫表字段新增修改刪除等DDL操作

oracle 資料庫表字段新增、修改、刪除等操作 1. 建立表 -- Create table create table TB_PERMISSION_ORGANIZATION ( id VARCHAR2(150) not null, parent_id

字典(上):什麼是字典及如何訪問新增修改刪除字典中的值

文章目錄 (一)、什麼是字典 (二)、訪問字典中的值 (三)、在字典中新增鍵 - 值對 (四)、修改字典中的值 (五)、刪除字典中的值

SSM整合-03 資訊新增修改與刪除

專案完整實現程式碼下載地址:https://download.csdn.net/download/bingbeichen/10578683。 該部分主要實現新員工資訊的新增,實現步驟包括: 在index.jsp頁面點選“新增”按鈕,彈出新增對話方塊; 向資料庫中查詢

超簡單!!——MySQL中新增修改刪除約束

轉自: https://blog.csdn.net/dreamsunday/article/details/22934009 ALTER TABLE:新增,修改,刪除表的列,約束等表的定義。 · 檢視列:desc 表名; · 修改表名:alter table t_book ren

UltraEdit 去除新增修改 右鍵選單名稱

UltraEdit 號稱世界上最好的文字編輯工具 官網: https://www.ultraedit.com/   我的軟體版本號: UltraEdit 專業文字/十六進位制編輯器 CS (x64) 版本 24.00.0.53   依次點選 高階

Linux中新增修改刪除使用者和使用者組

一、使用者: 在建立使用者時,需要為新建使用者指定一使用者組,如果不指定其使用者所屬的工作組,自動會生成一個與使用者名稱同名的工作組。建立使用者user1的時候指定其所屬工作組users,例:useradd –g users user1 1、使用命令 useradd 建立使用者 例:usera

Spring4.0.6 +Quartz 2.2.1動態新增修改刪除關閉定時任務(可結合資料庫以及空指標異常問題的解決)

不懂定時器的可以閱讀這位作者的文章:Quartz 2.2 的實現原理和執行過程:http://blog.csdn.net/xlxxcc/article/details/52104463 spring配置 <!-- 定時器 --> <!-- 這個類用來做需要完成的業務--&

oracle表按日期分割槽建立新增修改刪除

Oracle11G分割槽表   當表中的資料量不斷增大,查詢資料的速度就會變慢,應用程式的效能就會下降,這時就應該考慮對錶進行分割槽。表進行分割槽後,邏輯上表仍然是一張完整的表,只是將表中的資料在物理上存放到多個表空間(物理檔案上),這樣查詢資料時,不至於每次都掃描整張表。 作用:   Oracle的表

使用LINQLambda 表示式 委託快速比較兩個集合,找出需要新增修改刪除的物件

本文需要對C#裡的LINQ、Lambda 表示式 、委託有一定了解。 在工作中,經常遇到需要對比兩個集合的場景,如: 頁面集合資料修改,需要儲存到資料庫 全量同步上游資料到本系統資料庫 在這些場景中,需要識別出需要新增、更新、刪除的資料,由於每次應用是,需要比較的物件型別不一致,因此寫了個相對通用的方

字典與 set(上):什麼是字典及如何訪問新增修改刪除字典中的值

(一)、什麼是字典 字典:字典是放在花括號中一系列的鍵-值表示 # This is a dict student_0 = {'name': 'zhangsan', 'age': '20'} 冒號

PHP中MongoDB資料庫的連線新增修改查詢刪除等操作例項

PHP 擴充套件mongon.mod.dll下載http://cn.php.net/manual/en/mongo.installation.php#mongo.installation.windows 然後php.ini新增 extension=php_mongo.dll

php操作MongoDB基礎教程(連線新增修改刪除查詢)

舊版本mongo例項化用:new Mongo(); 新mongo例項化 <?php $m = new MongoClient(); // 連線 $db = $m->selectDB("example"); ?> //連線localhost:2701

轉sql server新增修改字段語句(整理)

復制表結構 fault add 創建 str 可選 double 刪除列 ble 添加字段的SQL語句的寫法: 通用式: alter table [表名] add [字段名] 字段屬性 default 缺省值 default 是可選參數增加字段: alter table [