public class LdapHelper {
private static DirContext ctx;
public static DirContext getCtx() {
if (ctx != null ) {
return ctx;
}
String account = "zhanghao"; //设置访问账号
String password = "mima"; //设置账号密码
String root = "DC=corp,DC=homelink,DC=com,DC=cn"; // root
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://172.1.1.1:389/" + root);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, account );
env.put(Context.SECURITY_CREDENTIALS, password);
try {
ctx = new InitialDirContext(env);
} catch (javax.naming.AuthenticationException e) {
Logger.getLogger(LdapHelper.class.getName()).log(Level.ERROR, "连接AD服务器账户错误", e);
} catch (Exception e) {
Logger.getLogger(LdapHelper.class.getName()).log(Level.ERROR, "连接AD服务器错误", e);
}
return ctx;
}
public static void closeCtx(){
try {
ctx.close();
} catch (NamingException ex) {
Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "关闭AD连接错误", ex);
}
}
/**
* 验证账户在AD是否生效
* @param sysID
* @param userCode
* @return 0 没有验证 。 1 没有这个数据。 2 数据错误。 3 成功。 4 账号错误。
* @throws Exception
*/
public static int valAccout(String sysID,String userCode) {
int ret = 0;
if (sysID != null && !"".equals(sysID) && userCode != null && !"".equals(userCode)){
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String query = "(&(objectClass=*)(pager=" + sysID + "))";
try{
NamingEnumeration<SearchResult> en = ctx.search("", query, constraints);
if(en == null){
Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "系统号"+sysID+"的账号在AD服务器中没有查找到数据", null);
return 1;
}
if(!en.hasMoreElements()){
Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "系统号"+sysID+"的账号在AD服务器中发生错误", null);
return 2;
}
while (en != null && en.hasMoreElements()){//maybe more than one element
Object obj = en.nextElement();
if(obj instanceof SearchResult){
SearchResult entry = (SearchResult) obj;
Attributes attr = entry.getAttributes();
Attribute att = attr.get("sAMAccountName");
String value = att.get().toString();
if(value != null ){
if(userCode.equals(value)){
ret = 3;
}else{
ret = 4;
}
}
}
}
}catch(Exception e){
Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "系统号"+sysID+"的账号在做AD验证时发生错误,错误编号为"+ ret, e);
ret = 2;
}
}
return ret;
}
/**
* 验证AD账户
* @param systemID 系统号
* @param userCode 用户名
* @return 0 没有验证 。 1 没有这个数据。 2 数据错误。 3 成功。 4 账号错误。
*/
public static int valUser(String systemID,String userCode) {
int ret = 0;
if (systemID != null && !"".equals(systemID) && userCode != null && "".equals(userCode)){
try {
getCtx();
ret = valAccout(systemID,userCode);
} catch (Exception e) {
Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "AD验证系统号" + systemID + "的用户登录错误,该用户code:" + userCode, null);
}finally{
closeCtx();
}
}else{
Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "获取验证信息系统号" + systemID + "userCode" + userCode, null);
}
return ret;
}
public static void main(String[] args) throws Exception {
getCtx();
valAccout("10500100","nj_wangying");
closeCtx();
}
}
分享到:
相关推荐
这是用java连接window server 的Acitive Directory进行用户登陆验证的代码,里面用的是用户名的登陆名进行验证,也可以是用户的其他信息(如邮箱等)进行验证。
LDAP实现AD域账号验证
验证AD域用户登录 ,传入用户名(userName)和密码(password)进行验证。
SynchAccountToAD2012实例,需要的可以下载,封装了
主要介绍了JAVA使用Ldap操作AD域的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
打包命令为:mvn clean package Jar包运行命令为:java -jar C:\Users\z00459km\Desktop\demo-0.0.1-SNAPSHOT.jar 亲测AD域认证通过,内容包含两种认证信息写法。
java JNDI方式修改AD域密码 免ssl验证方式修改AD域密码 LDAP SSL 证书 javassl 很实用的一段代码,免去了复杂的证书操作过程。
java使用ldap修改ad域用户密码
验证AD域账号登陆,获取AD域用户列表,获取用户邮箱,修改密码等AD域操作
JAVA ldap AD 域 免证书 查询 修改 删除 新增 启用 禁用 修改密码
提供AD的添加账号,删除账号,修改账号(修改密码)功能,附有详细代码
世上最全通过利用JAVA新建、修改、删除AD用户、添加至组及更新密码,包括证书服务器的配置、JAVA证书导...
配合本人AD域证书导入的配置博客,本代码为AD域用户插入和密码修改
java对ad域的一些操作,里面的一些ip要进行一些修改就能用
java连接LDAP实例和jar包,里面包含ssl连接和更改LDAP属性的例子,公参考
实现了用java对AD域的增删改查功能,这只是当时我自己试验时候的例子。功能都实现了。
使用LDAP进行AD验证的程序,自己测试过了,可以用
介绍Ad域服务器证书如何申请,如何导出,如何导入到java秘钥库,地址:https://blog.csdn.net/hc1017/article/details/81293323 实现ssl 修改ad用户密码,禁用启用用户。有两个demo测试文
C#使用域的用户名和密码,方便统一账号平台
java实现