前言:
由于项目需要对接windows域,进行对 windows 域用户的管理和密码的初始化和修改的功能,本文也是针对各大博客的汇总,而不是我的原创,只是在尝试了很多博主的博客后,总结出来的一套可以使用的代码,本文中就不做太多的名词解释工作,直接了当的面对疾风
对于修改密码而言,我查看的博客分两类的描述,一种是修改属性 userPassword
例如:ldap使用java修改密码,第二种则是修改 unicodePwd
属性,根据官网地址描述可以确定是 unicodePwd
属性,官网地址我放到文末了
准备工作
- 一台 windows server 的服务器
- 一台普通 Windows PC
第一步,搭建 windows server 环境
略
第二步,获取 SSL 证书,并加入客户端
参考文章 AD域证书申请,导入Java密钥库,实现ldap修改AD用户密码
第三步,撸代码
<dependency>
<groupId>com.unboundid</groupId>
<artifactId>unboundid-ldapsdk</artifactId>
<version>6.0.8</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.25</version>
</dependency>
- 信任自签证书
import javax.net.SocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
/**
* 自定义的SSL工厂里面加载自己实现X509TrustManager,信任自签证书
* @author zyred
*/
public class CustomSslSocketFactory extends SSLSocketFactory {
private SSLSocketFactory socketFactory;
public CustomSslSocketFactory() {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, new TrustManager[]{
new DummyTrustmanager()}, new SecureRandom());
socketFactory = ctx.getSocketFactory();
} catch (Exception ex) {
ex.printStackTrace(System.err);
}
}
public static SocketFactory getDefault() {
return