개발관련/JAVA

ldap (Active Directory) 에 로그인 정보 확인

길동무92 2016. 11. 9. 17:51

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;

public class AdTest {

 @SuppressWarnings("unchecked")
 public static void main(String[] args) throws Exception {

/*
 #LDAP Setting
 ldap.usage=yes
 ldap.server1.ip=*.*.46.182
 ldap.server1.port=389
 ldap.server2.ip=*.*.46.183
 ldap.server2.port=389
 ldap.domain.name=hdv-ad
 ldap.root.path=ldap://*.*.46.182:389/DC=HDVP-**,DC=COM
*/
    
    
  String ntUserId = "Z0551";
  String ntPasswd = "123456789!";
  String url = "ldap://*.*.46.182:포트";
  String domain = "domain"; // 회사명이 domain.com이라면 DOMAIN
  String searchBase = "DC=**-AD,DC=COM"; // 검색대상 tree
 
  //Z0564 / 12345678!

  Hashtable env = new Hashtable();
  env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
  env.put(Context.PROVIDER_URL, url);
  env.put(Context.SECURITY_AUTHENTICATION, "simple");
  env.put(Context.SECURITY_PRINCIPAL, domain + "\\" + ntUserId);
  env.put(Context.SECURITY_CREDENTIALS, ntPasswd);

  try {
 
  LdapContext ctx = new InitialLdapContext(env, null);
  SearchControls sc = new SearchControls();
  sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
  sc.setReturningAttributes(new String[] { "cn", "mail", "name" });


  NamingEnumeration results = ctx.search(searchBase, "sAMAccountName=" + ntUserId, sc);
  while (results.hasMoreElements()) {
   SearchResult sr = (SearchResult) results.next();
   Attributes attrs = sr.getAttributes();
   System.out.println("attributes: " + attrs);
  }
  results.close();
 
  } catch(Exception e) {
      System.out.println("잘못된 정보임");
  }
 }
}