LDAP认证

来源:互联网 发布:申通快递淘宝价格表 编辑:程序博客网 时间:2024/05/22 06:56
package com.sn.ssm.utils;


import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Vector;


import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
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 LdapUtils {


    private  String URL = "ldap://XXXXXXX:389/";
    private  String BASEDN = "dc=neusoft,dc=internal";
    private  String FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
    private  LdapContext ctx = null;
    private  Hashtable<String, String> env = null;
    private  Control[] connCtls = null;
   
    public static void main(String[] args) {
    LdapUtils lp = new LdapUtils();
    boolean Lcontect=lp.LDAP_connect("lis","Neu,123.LS");
    boolean Lauthenricate =lp.authenricate("public_ldap_user","Neu,123.");
    Map<String,String> userMessage =lp.getUserMessage("zhao.shd");
    for(Map.Entry<String, String> entry:userMessage.entrySet()){
   
    System.out.println(entry.getKey()+":"+entry.getValue());
   
    }
    //System.out.println(userMessage.get("msDS-PhoneticDisplayName"));
   

}
   
    public boolean LDAP_connect(String userName,String passWord){
        env = new Hashtable<String, String>();
        env.put(Context.INITIAL_CONTEXT_FACTORY,FACTORY);
        env.put(Context.PROVIDER_URL, URL+BASEDN);//LDAP server
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        //此处若不指定用户名和密码,则自动转换为匿名登录
        env.put(Context.SECURITY_PRINCIPAL, "cn="+userName+",ou=people,dc=neusoft,dc=internal");
        env.put(Context.SECURITY_CREDENTIALS, passWord);
        
        try{
            ctx = new InitialLdapContext(env,connCtls);
            return true;
        }catch(javax.naming.AuthenticationException e){
            System.out.println("Authentication faild: "+e.toString());
            return false;
        }catch(Exception e){
            System.out.println("Something wrong while authenticating: "+e.toString());
            return false;
        }
    }
   
   
    public  Map<String,String> getUserMessage(String email){
        Map<String,String> result_map=new HashMap<>();
        try{
               SearchControls constraints = new SearchControls();
               constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
               NamingEnumeration en = ctx.search("", "mail="+email+"@neusoft.com", constraints); //The UID you are going to query,* means all nodes
               if(en == null){
                System.out.println("Have no NamingEnumeration.");
               }
               if(!en.hasMoreElements()){
                System.out.println("Have no element.");
               }
               while (en != null && en.hasMoreElements()){//maybe more than one element
                   Object obj = en.nextElement();
                   if(obj instanceof SearchResult){
                       SearchResult si = (SearchResult) obj;
                     //  userDN += si.getName();
                     //  userDN += "," + BASEDN;
                       Attributes at = si.getAttributes();  
                       NamingEnumeration ane = at.getAll();  
                       while (ane.hasMore()) {  
                       Attribute attr = (Attribute) ane.next();  
                       String attrType = attr.getID();  
                       NamingEnumeration values = attr.getAll();  
                       Vector vals = new Vector();  
                       // Another NamingEnumeration object, this time  
                       // to iterate through attribute values.  
                       while (values.hasMore()) {  
                       Object oneVal = values.nextElement();  
                       if (oneVal instanceof String) {  
                       result_map.put(attrType, oneVal.toString());
                          //System.out.println(attrType + ": " + (String) oneVal);  
                       } else {  
                         System.out.println(attrType + ": " + new String((byte[]) oneVal));  
                       }  
                       }
                       }
                        
                   }
                   else{
                       System.out.println(obj);
                   }
                   System.out.println();
               }
              }catch(Exception e){
               System.out.println("Exception in search():"+e);
              }
        
        return result_map;
    }
   
   
    public boolean authenricate(String eamil,String password){
        boolean valide = false;
        //String userDN = getUserDN(ID);
        try {
            ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,"cn="+eamil+",ou=people,dc=neusoft,dc=internal");
            ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,password);
            ctx.reconnect(connCtls);
            System.out.println(eamil + " is authenticated");
            valide = true;
        }catch (AuthenticationException e) {
            System.out.println(eamil + " is not authenticated");
            System.out.println(e.toString());
            valide = false;
        }catch (NamingException e) {
            System.out.println(eamil + " is not authenticated");
            valide = false;
        }
       
        return valide;
    }
}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 车漆外面一层保护膜被划开了怎么办 美团骑手gps信号弱时怎么办 华为荣耀4x充电插口坏了怎么办 华为畅享5s开不了机怎么办 华为梅特10忘记账号密码怎么办 华为荣耀8充电接口坏了怎么办 华为手机锁屏了自动开屏怎么办 支付宝收货地址写错了怎么办 支付宝领海报地址写错了怎么办 手机总是弹出日历已停止运行怎么办 华为mate8忘了锁屏密码怎么办 红米4a打王者卡怎么办 苹果5s软件更新密码忘记了怎么办 华为荣耀P9进水了没有声音怎么办 华为荣耀7原相机不能拍照怎么办 华为手机触屏密码忘记了怎么办 华为荣耀10屏锁密码忘了怎么办 华为手机开机卡在开机界面怎么办 苹果6s国行不能用移动4g怎么办 苹果手机32g内存不够用怎么办 华为荣耀6x忘记了密码怎么办 百度粉色衣服被洗变色了怎么办 粉色衣服放进洗衣机洗变色了怎么办 红米note5a应用锁忘了怎么办 索尼手机死机了怎么办不可拆卸电池 华为手机一直停留在开机画面怎么办 5s用11.4太卡了怎么办 华为荣耀5a手机声音小怎么办 牙签卡在手机插卡针里怎么办 捡的华为手机账号激活不了怎么办 华为平板激活手机密码忘了怎么办 捡个华为手机非要激活才能用怎么办 华为手机没激活想重新激活怎么办 华为手机激活总显示系统繁忙怎么办 华为荣耀7i进水了不开机怎么办 华为荣耀手机进水了怎么办开不开机 华为畅享5s变砖怎么办 我的苹果7机身内存满了怎么办 小米5x拆机后屏幕翘边怎么办 苹果手机设备禁止游戏登入怎么办 苹果7plus玩游戏掉频怎么办