有 Java 编程相关的问题?

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

java使用未绑定sdk在ApacheDS服务器中搜索组内的用户

我使用ApacheDS作为目录服务器&UnboundID作为LDAP SDK,用于输入用户及其相关组。我正在跟踪一个链接

http://ldapwiki.willeke.com/wiki/Tips%20using%20UnboundID%20LDAP%20SDK

其中他们使用了CompareRequest方法来确定用户是否是特定组的成员

我针对这个方法编写的代码是这样的

//input ---- uid = "rohit.joshi" and groupName = "Java" public boolean isUserMemberOfGroup(String uid, String groupName) { boolean answ = false; LDAPConnection connection = connect(); try { //userDN -- uid=rohit.joshi,ou=users,o=wipro String userDN = "uid=" + uid + ",ou=users," + LDAP_BASE_DN; //groupDN -- cn=Java,ou=groups,o=wipro String groupDN = "cn=" + groupName + ",ou=groups," + LDAP_BASE_DN; CompareRequest compareRequest = new CompareRequest(userDN, "uniqueMember", groupDN); CompareResult compareResult = connection.compare(compareRequest); if (compareResult.compareMatched()) { // The user is a member of the group. System.out.println("user is a member of group"); } else { // The user is not a member of the group. System.out.println("user is not a member of group"); } } catch (LDAPException e) { e.printStackTrace(); } return answ; }

CREATING LDAP CONNECTOR Connection with LDAP Server Established : true LDAPException(resultCode=16 (no such attribute), errorMessage='NO_SUCH_ATTRIBUTE: failed for MessageType : COMPARE_REQUEST Message ID : 1 Compare request Entry : 'uid=mahesh.joshi,ou=users,o=wipro' Attribute description : 'uniqueMember' Attribute value : 'cn=Java,ou=groups,o=wiproorg.apache.directory.api.ldap.model.message.CompareRequestImpl@1d9123e1: null', diagnosticMessage='NO_SUCH_ATTRIBUTE: failed for MessageType : COMPARE_REQUEST Message ID : 1 Compare request Entry : 'uid=mahesh.joshi,ou=users,o=wipro' Attribute description : 'uniqueMember' Attribute value : 'cn=Java,ou=groups,o=wiproorg.apache.directory.api.ldap.model.message.CompareRequestImpl@1d9123e1: null') at com.unboundid.ldap.sdk.LDAPConnection.compare(LDAPConnection.java:2236) at com.LdapServiceImpl.isUserMemberOfGroup(LdapServiceImpl.java:380) at com.App.main(App.java:102)

但运行此方法时,控制台中会出现如上所示的错误。而我能够单独检查用户和组的存在。但是在单个查询操作中检查它们仍然是不可能的。在这方面的任何建议都会大有裨益


共 (1) 个答案

  1. # 1 楼答案

    显然,在ApacheDS中,“uniqueMember”没有这样的属性

    LDAPException(resultCode=16 (no such attribute), errorMessage='NO_SUCH_ATTRIBUTE: failed for MessageType : COMPARE_REQUEST
    Message ID : 1
        Compare request
            Entry : 'uid=mahesh.joshi,ou=users,o=wipro'
            Attribute description : 'uniqueMember'
    

    尝试使用'member'而不是'uniqueMember'

    工作示例:

    public static void main(String[] args)
    {
        LDAPConnection connection = new LDAPConnection();
        try
        {
           connection.connect("localhost", 10389);
        }
        catch (LDAPException e)
        {
        // TODO Auto-generated catch block
           e.printStackTrace();
        }
        String attributeName = "uniqueMember";
        String assertionValue = "uid=mahesh.joshi,ou=users,ou=sevenSeas,dc=example,dc=com";
        String entryDN = "cn=Java,ou=groups,ou=sevenSeas,dc=example,dc=com";
        CompareRequest compareRequest = new CompareRequest(entryDN, attributeName, assertionValue);
        CompareResult compareResult = null;
        try
        {
           compareResult = connection.compare(compareRequest);
           if (compareResult.compareMatched())
           {
               System.out.println("The user: " + assertionValue + " is a member of the group: " + entryDN);
           }
           else
           {
               System.out.println("The user: " + assertionValue + " is NOT a member of the group: " + entryDN);
           }
        }
        catch (LDAPException e)
        {
        // TODO Auto-generated catch block
           e.printStackTrace();
        }
    }
    

    设置一个与您的场景尽可能接近的示例。 -吉姆