java做AD域的登录与认证
1 、AD域最简单的理解方式是:如将用户账户密码放在域中进行集中的权限管理和认证,共享系统中的资源信息。
中石化的项目目前都要求使用AD域账户登陆所有系统,因此就会碰到java进行AD域认证。
2、 目前遇到AD认证有两种解决方案:
需要下载相关jar包,代码直接贴上来:
a、若抛出异常,则可能是账户密码错误,服务器内部错误等状况。
UniAddress dc = UniAddress.getByName("192.168.21.111"); //对IP进行更换即可
jcifs.smb.NtlmPasswordAuthentication auth = new jcifs.smb.NtlmPasswordAuthentication("192.168.21.111", username, password);
jcifs.smb.SmbSession.logon(dc, auth);
b、第二种情况
String host = "10.208.1.2"; // AD服务器
String port = "389"; // AD端口
String url = new String("ldap://" + host + ":" + port);
Hashtable HashEnv = new Hashtable();
String adminName = "conn@sinopec.ad"; //连接AD域的账户
String adminPassword = "conn123"; //连接AD域的密码
HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
HashEnv.put(Context.SECURITY_PRINCIPAL, adminName); // AD User
HashEnv.put(Context.SECURITY_CREDENTIALS, adminPassword); // AD Password
HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工厂类
HashEnv.put(Context.PROVIDER_URL, url);
LdapContext ctx = new InitialLdapContext(HashEnv, null);
UniAddress dc = UniAddress.getByName("10.208.1.2");
jcifs.smb.NtlmPasswordAuthentication auth = new jcifs.smb.NtlmPasswordAuthentication("10.208.1.2", username, password);
jcifs.smb.SmbSession.logon(dc, auth);
最后,这是我目前java遇到AD认证问题,原理都一样,还希望大神多多指教。