【问题标题】:How can I find an LDAP user's DN in JSP?如何在 JSP 中找到 LDAP 用户的 DN?
【发布时间】:2015-07-20 13:17:11
【问题描述】:

我试图在 JSP 的 LDAP 树中查找用户的 OU。我可以使用以下代码检索许多用户的 LDAP 属性:

Hashtable<String, String> tenv = new Hashtable<String, String>();

tenv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
tenv.put(Context.PROVIDER_URL, "ldap://xx.xx.xx.xx:389/");

SearchControls sc = new SearchControls();
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);   

LdapContext lctx = new InitialLdapContext(tenv, null);
String filter = "cn=" + userid;
NamingEnumeration res = lctx.search ("dc=my,dc=dom,dc=org", filter, sc);

while (res.hasMore()) 
{
   SearchResult s = (SearchResult) res.next();
   Attributes attrs = s.getAttributes();
   Attribute attr = attrs.get("SN");
   out.println ("<font color=red>" + attr + "</font>");
}

当我在 Linux 命令行中使用类似的搜索参数运行 ldapsearch 时,我可以看到一个 DN:它显示了用户所在的 OU (dn: uid=username,ou=users,dc=my, dc=dom,dc=org)。 我试过 attrs.get("DN") 并返回 null。如何在 JSP 中检索此 DN:?

【问题讨论】:

    标签: java jsp openldap


    【解决方案1】:

    显然有“there is no direct way of obtaining the Distinguished Name (DN) from the search results.

    这段代码可以做到:

    import java.util.Hashtable;
    
    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.DirContext;
    import javax.naming.directory.InitialDirContext;
    import javax.naming.ldap.*;
    import javax.naming.directory.SearchControls;
    import javax.naming.directory.SearchResult;
    class GetAllAttrs 
    {
    
      public static void main(String[] args) 
      {
        String filter = "cn=myuser";    // this is the user to look for
        String baseDN = "dc=my,dc=dom,dc=org";
        String ldapURL = "ldap://192.168.101.1:389";
    
        // Set up the environment for creating the initial context
        Hashtable<String, Object> env = new Hashtable<String, Object>(11);
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, ldapURL);
    
        try 
        {
          // Create the initial context
          LdapContext ctx = new InitialLdapContext(env, null);
    
          SearchControls sc = new SearchControls();
          sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
          NamingEnumeration res = ctx.search (baseDN, filter, sc);
    
          while (res.hasMore()) 
          {
             SearchResult s = (SearchResult) res.next();
    
             // print user's DN
             System.out.println(">>" + s.getNameInNamespace());
          }
    
          // Close the context when we're done
          ctx.close();
    
        } 
        catch (Exception e) 
        {
          e.printStackTrace();
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      相关资源
      最近更新 更多