zoukankan      html  css  js  c++  java
  • Ldap登陆AD(Active Directory)进行认证的Java示例

    原文地址:http://hi.baidu.com/js2007/item/24efbb0fae1c9b90a3df432a

    package LdapTest;
    import java.util.Hashtable;
    import javax.naming.Context;
    import javax.naming.NamingEnumeration;
    import javax.naming.NamingException;
    import javax.naming.AuthenticationException;
    import javax.naming.directory.SearchControls;
    import javax.naming.directory.SearchResult;
    import javax.naming.ldap.Control;
    import javax.naming.ldap.InitialLdapContext;
    import javax.naming.ldap.LdapContext;
    public class AuthenticationTest {
       
    private String BASE_DN ="dc=statestreet,dc=com"; 
    // private DirContext ctx = null;
        private LdapContext ctx = null;     
        private Hashtable env = null;
        private Control[] connCtls = null; 
        
        private void LdapConnect(){
            env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, ");    
            env.put(Context.SECURITY_AUTHENTICATION, "simple");
            env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=statestreet,dc=com");
            env.put(Context.SECURITY_CREDENTIALS, "****");   //自己填入
           
            try{
                ctx = new InitialLdapContext(env,connCtls);
    //          ctx = new InitialDirContext(env);
                System.out.println("Login Ldap Server Successful...");
            }catch(AuthenticationException e){
            System.out.println("Login Ldap Server Failed...");
            e.printStackTrace();
            }catch(Exception e){
            System.out.println("Login Ldap Server Wrong...
     "+e.toString());
            }
        }
        
        private String getUserDN(String userid){    
        String userDN="";    
        try{
           SearchControls constraints = new SearchControls();
                constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
            NamingEnumeration en = ctx.search("","uid="+userid,constraints); 
            if(en == null){
               System.out.println("Have NO such user!");
            }
                if(!en.hasMoreElements()){
                    System.out.println("Have NO such user!");
                   }
                while (en != null && en.hasMoreElements()){
                Object obj = en.nextElement();
                 if(obj instanceof SearchResult){
                 SearchResult si = (SearchResult) obj;
                 userDN += si.getName();
                 userDN += "," + BASE_DN;
                 }
                 else{
                     System.out.println(obj);
                 }
                }
        }catch(Exception e){
                System.out.println("Exception in search user DN : "+e.toString());
            }
        return userDN;
        }
        
        public boolean Authenricate(String ID,String pwd){
        LdapConnect();
            boolean valide = false;
            String userDN = getUserDN(ID);
            
            if(userDN=="")
            return valide;
           
            try {
                ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,userDN);
                ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,pwd);
                ctx.reconnect(connCtls);
                System.out.println(userDN + " is authenticated! ");
                valide = true;
            }catch (AuthenticationException e) {
                System.out.println(userDN + " is NOT authenticated! ");
                valide = false;
            }catch (NamingException e) {
                System.out.println(userDN + " is NOT authenticated! ");
                valide = false;
            }
            LdapDisconnect();
            return valide;
        } 
        
        private void LdapDisconnect(){
            if (ctx != null) {
                try {
                 ctx.close();
                }
                catch (NamingException e) {
                 e.printStackTrace();
                }
              }
        }
    }
  • 相关阅读:
    实验3 简单的分支与循环结构 2.利用循环计算n个圆柱体体积。
    实验 3 简单的分支与循环结构 第一题 编写求圆面积的程序,要求当输入的半径r<=0时,提示输入错误,要求r为浮点型,r的数值是动态的由键盘输入
    心得3
    作业 3 应用分支与循环结构解决问题
    实验5 函数
    实验1 题目2
    第三,四章学习心得
    第2章学习心得
    第一章学习心得
    5-3
  • 原文地址:https://www.cnblogs.com/eastson/p/3722063.html
Copyright © 2011-2022 走看看