• ldap查询、鉴权


    package cn.richinfo.ldap;
    
    import java.util.Iterator;
    
    import com.novell.ldap.LDAPAttribute;
    import com.novell.ldap.LDAPAttributeSet;
    import com.novell.ldap.LDAPConnection;
    import com.novell.ldap.LDAPEntry;
    import com.novell.ldap.LDAPException;
    import com.novell.ldap.LDAPSearchResults;
    
    public class LdapSearch {
    
        @SuppressWarnings("unchecked")
        public static void main(String[] args) {
            //String ldapHost = "116.62.8.139";// ldap服务器
            String ldapHost = "192.168.34.97";
            int ldapPort = LDAPConnection.DEFAULT_PORT;// ldap端口
            String loginDN = "cn=Directory Manager,o=h3gat";// rootdn(slapd.conf的rootdn属性)
            String password = "123456";// rootpw(slapd.conf的rootpw属性)
            String searchBase = "o=h3gat";// suffix(slapd.conf的suffix属性)
            int searchScope = LDAPConnection.SCOPE_SUB;// 查询范围
            String searchFilter = "objectClass=*";//查询zteperson所有用户
            //String searchFilter = "(&(|(|(mail=gay4@richmail.com)(mail=aaa@richinfo.cn))(|(mailalternateaddress=gay4@richmail.com)(mailalternateaddress=aaa@richinfo.cn)))(blocked=0))";// filter
    
            LDAPConnection lc = new LDAPConnection();
            try {
                lc.connect(ldapHost, ldapPort);
                lc.bind(LDAPConnection.LDAP_V3, loginDN, password.getBytes("UTF8"));
                System.out.println("Bind success.");
                LDAPSearchResults searchResults = lc.search(searchBase, searchScope, searchFilter, null, false);
                System.out.println("Result = " + searchResults.getCount());
                while (searchResults.hasMore()) {
                    LDAPEntry nextEntry = null;
                    try {
                        nextEntry = searchResults.next();
                    } catch (LDAPException e) {
                        System.out.println("Error: " + e.toString());
                        if (e.getResultCode() == LDAPException.LDAP_TIMEOUT || e.getResultCode() == LDAPException.CONNECT_ERROR) {
                            break;
                        } else {
                            continue;
                        }
                    }
                    System.out.println("DN = " + nextEntry.getDN());
                    System.out.println("	Attributes list:");
                    LDAPAttributeSet attributeSet = nextEntry.getAttributeSet();
                    Iterator<LDAPAttribute> allAttributes = attributeSet.iterator();
                    while (allAttributes.hasNext()) {
                        LDAPAttribute attribute = allAttributes.next();
                        System.out.println("		" + attribute.getName() + " = " + attribute.getStringValue());
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (lc.isConnected()) {
                        lc.disconnect();
                        System.out.println("Unbind success.");
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
    package cn.richinfo.ldap;
    
    import java.util.Hashtable;
    
    import javax.naming.Context;
    import javax.naming.NamingEnumeration;
    import javax.naming.NamingException;
    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 LdapAuthentication {
    
        private LdapContext ctx = null;
        private final Control[] connCtls = null;
    
        private void execute() {
            Hashtable<String, String> env = new Hashtable<String, String>();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");// 不用改
            env.put(Context.PROVIDER_URL, "ldap://116.62.8.139:389/");// ldap服务器
            env.put(Context.SECURITY_AUTHENTICATION, "simple");// 不用改
            env.put(Context.SECURITY_CREDENTIALS, "123456");// rootpw(slapd.conf的rootpw属性)
            env.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager,o=h3gat"); // rootdn(slapd.conf的rootdn属性)
    
            try {
                ctx = new InitialLdapContext(env, connCtls);
                System.out.println("Bind success.");
                String suffix = "o=h3gat";// suffix(slapd.conf的suffix属性)
                String filter = "(|(mail=gay5@richmail.com)(mailalternateaddress=gay5@richinfo.cn))";// 要鉴权的用户
                String password = "83B34499282F00DFDB908238435026C2";// //要鉴权的用户密码
                authenricate(suffix, filter, password);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (ctx != null) {
                    try {
                        ctx.close();
                        System.out.println("Unbind success.");
                    } catch (NamingException e) {
                        e.printStackTrace();
                    }
    
                }
            }
        }
    
        public static void main(String[] args) {
            LdapAuthentication ldap = new LdapAuthentication();
            ldap.execute();
        }
    
        private String getUserDN(String suffix, String filter) {
            String userDN = "";
            try {
                SearchControls constraints = new SearchControls();
                constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
                NamingEnumeration<SearchResult> en = ctx.search(suffix, filter, constraints);
                if (en == null || !en.hasMoreElements()) {
                    System.out.println("未找到该用户");
                }
                while (en.hasMoreElements()) {
                    SearchResult result = en.nextElement();
                    System.out.println(result.getNameInNamespace());
                    userDN = result.getNameInNamespace();
                }
            } catch (Exception e) {
                System.out.println("查找用户时产生异常。");
                e.printStackTrace();
            }
    
            return userDN;
        }
    
        public boolean authenricate(String suffix, String filter, String password) {
            boolean valide = false;
            try {
                String userDN = getUserDN(suffix, filter);
                ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN);
                ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, password);
                ctx.reconnect(connCtls);
                System.out.println("Authenricate success.");
                valide = true;
            } catch (Exception e) {
                e.printStackTrace();
                valide = false;
            }
            return valide;
        }
    
    }
  • 相关阅读:
    nodeType 节点简介
    Hamming Codes
    Preface Numbering(还没好好看USACO的解答)
    位运算常见应用即ACM题优化实例
    Dynamic Programming(动态规划)
    operator new & new operator
    资料记录
    Ordered Fractions
    Healthy Holsteins
    Sorting A ThreeValued Sequence
  • 原文地址:https://www.cnblogs.com/linying/p/7308146.html
Copyright © 2020-2023  润新知