d小旭

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认证问题,原理都一样,还希望大神多多指教。

 

 

posted on 2017-03-30 09:52  d小旭  阅读(1614)  评论(0编辑  收藏  举报

导航