与admin绑定后使用LDAP对用户进行身份验证?

问题描述

我一直在尝试构建在Tomcat 9上运行的Web应用程序,该应用程序通过LDAP服务器对用户进行身份验证。请在下面查看我的代码

        String username = request.getParameter("uname");
        String password = request.getParameter("password");
        
        String base = "DC=xsoltns,DC=y";
        String dn = "CN=Admin,CN=Users," + base;
        String ldap_url = "ldap://address:389";
        
        Properties props = new Properties();
        props.put(Context.INITIAL_CONTEXT_FACTORY,("com.sun.jndi.ldap.LdapCtxFactory"));
        props.put(Context.PROVIDER_URL,ldap_url);
        props.put(Context.Security_PRINCIPAL,dn);
        props.put(Context.Security_CREDENTIALS,"adminpassword");
        
        try 
        {
            InitialDirContext context = new InitialDirContext(props);
            
            String principle_name = username+"@mydomain.com";
            
            
            SearchControls ctrls = new SearchControls();
            ctrls.setReturningAttributes(new String[] {"givenname","sn","memberOf"});
            ctrls.setSearchScope(SearchControls.SUBTREE_ScopE);
            
            NamingEnumeration<javax.naming.directory.SearchResult> answers = 
                    context.search(base,"(uid="+principle_name+")",ctrls);
            javax.naming.directory.SearchResult result = answers.nextElement();
            String user = result.getNameInNamespace();
            
            try 
            {
                props = new Properties();
                props.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
                props.put(Context.PROVIDER_URL,ldap_url);
                props.put(Context.Security_PRINCIPAL,user);
                props.put(Context.Security_CREDENTIALS,password);

                context = new InitialDirContext(props);
                
                //user authenticated
                
            } catch (Exception e)
            {
                //error with user auth
            }
                    
            
        } catch (Exception e) 
        {
            //error with admin auth
            
        }

该程序已使用Admin帐户成功绑定,但根据提供的用户名找不到该用户。构建此应用程序时,我一直在使用先前的答案LDAP Authentication using Java作为参考。我的目标是提供用户名,然后在目录中搜索用户的全名(作为CN来提供辅助身份验证)。经过一些测试,我发现 user answers 返回空值,即未找到用户。我不太明白为什么会这样,搜索还需要提供其他内容吗?我该怎么办?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)