有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用java从ldap服务器获取数据

请在下面找到我的代码片段:

String[] attrIDs = {"title", "Depatrment", "DivisionDescription" };

SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(attrIDs); 
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);

NamingEnumeration<SearchResult> answer = ctx.search(ldapServerSearchBase, FILTER, ctls);
SearchResult sr = (SearchResult) answer.next(); 
Attributes attrs = sr.getAttributes();

String str_title = attrs.get("title").toString();

String str_dept = null;
String str_desc = null;
if(str_title.equals("Professor"))
{
    str_dept = attrs.get("Depatrment").toString();
    str_desc = attrs.get("DivisionDescription").toString();
}
System.out.println(str_title);
System.out.println(str_dept);
System.out.println(str_desc);  

当我运行这段代码时,当我输出str_dept和str_desc时,它总是显示null。但它确实正确地将str_title显示为“Professor”。 请帮助我了解这里可能出现的问题

谢谢


共 (2) 个答案

  1. # 1 楼答案

    您确定要获取的属性确实存在吗

    str_dept = attrs.get("Depatrment").toString();
    str_desc = attrs.get("DivisionDescription").toString();
    

    首先,Depatrment拼写错误,而且DivisionDescription很可能不存在(至少在大多数目录服务的默认示意图中不存在)。可能您需要以下属性?:

    • DivisionDescription=>division
    • Depatrment=>department

    但是,请检查您的目录服务是否确实包含请求的属性(并且用户在这些属性中确实有一些值)

  2. # 2 楼答案

    虽然我相信,如果提供更多信息,有更好的方法来做到这一点,但下面的例子应该会让你上路:

    String[] attrIDs = {"title", "Depatrment", "DivisionDescription" };
    
    SearchControls ctls = new SearchControls();
    ctls.setReturningAttributes(attrIDs); 
    ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    
    
    NamingEnumeration<SearchResult> answer = ctx.search(ldapServerSearchBase, filter, ctls);
    SearchResult sr = (SearchResult) answer.next(); 
    Attributes attrs = sr.getAttributes();
    String str_title=null;
    String str_dept = null;
    String str_desc = null;
    if( attrs.get("title")!=null)
    {
        str_title = attrs.get("title").toString();
        System.out.println(str_title);
        if(str_title.equals("Professor"))
        {
            str_dept = attrs.get("Depatrment").toString();
            str_desc = attrs.get("DivisionDescription").toString();
            System.out.println(str_dept);
            System.out.println(str_desc);
        }
    }
    

    -吉姆