从Java检索objectGUID LDAP

时间:2020-01-28 19:26:43

标签: java active-directory ldap

几天来我一直在测试发现的所有内容,以正确解码objectGUID。我尝试稍后获得一个Object并将其转换为Byte [],我不确定这是否是正确的过程来对其进行解码并获取自测试以来在Active Directory中显示的值,但在进行解码时显示的值与其在AD中相应用户中出现的值不同。如果有人可以指导我制定正确的程序,以使我获得正确的价值,或者可以简要地解释我做错了什么,那么我可以接受任何解决方案。

SearchControls searchControls = new SearchControls();
        searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
        NamingEnumeration<SearchResult> results = ctx.search(ldapSearchBase, searchFilter, searchControls);
//atributos []  contains the names of the attributes that I need to consult

        while(results.hasMoreElements()){
            SearchResult searchResult = (SearchResult) results.next();
            Attributes attributes = searchResult.getAttributes();            
            for (int i = 0;i<=atributos.length;i++){
                if(i<atributos.length){
                    if(atributos[i].equals("objectGUID")){
                        try {
                           Object c = attributes.get("objectGUID").get();
                           decodeEntryUUID(c);                           
                           content.put(attributes.get(atributos[i]).getID(),decodeEntryUUID(c));
                         }catch (NullPointerException e){
                              System.err.println("Problem listing attributes: " + e);
                         }
public String decodeEntryUUID(Object entryUUID) throws IOException {
        String ret = "x";    
        ret=decodeGuid(serializeObject(entryUUID));        
        return ret;
    }

    public static String decodeGuid(byte[] guid) {
        byte[] withBigEndian = new byte[] { guid[3], guid[2], guid[1], guid[0],
            guid[5], guid[4],
            guid[7], guid[6],
            guid[8], guid[9], guid[10], guid[11], guid[12], guid[13], guid[14], guid[15]
        };
        return convertToDashedString(withBigEndian);
    }

    public static String decodeObjectGUID(byte[] objectGUID) {
        StringBuilder displayStr = new StringBuilder();

        displayStr.append(convertToDashedString(objectGUID));
        System.out.println(displayStr.toString()+" 3");
        return displayStr.toString();
    }
     private static String convertToDashedString(byte[] objectGUID) {
        StringBuilder displayStr = new StringBuilder();

        displayStr.append(prefixZeros((int) objectGUID[3] & 0xFF));
        displayStr.append(prefixZeros((int) objectGUID[2] & 0xFF));
        displayStr.append(prefixZeros((int) objectGUID[1] & 0xFF));
        displayStr.append(prefixZeros((int) objectGUID[0] & 0xFF));
        displayStr.append("-");
        displayStr.append(prefixZeros((int) objectGUID[5] & 0xFF));
        displayStr.append(prefixZeros((int) objectGUID[4] & 0xFF));
        displayStr.append("-");
        displayStr.append(prefixZeros((int) objectGUID[7] & 0xFF));
        displayStr.append(prefixZeros((int) objectGUID[6] & 0xFF));
        displayStr.append("-");
        displayStr.append(prefixZeros((int) objectGUID[8] & 0xFF));
        displayStr.append(prefixZeros((int) objectGUID[9] & 0xFF));
        displayStr.append("-");
        displayStr.append(prefixZeros((int) objectGUID[10] & 0xFF));
        displayStr.append(prefixZeros((int) objectGUID[11] & 0xFF));
        displayStr.append(prefixZeros((int) objectGUID[12] & 0xFF));
        displayStr.append(prefixZeros((int) objectGUID[13] & 0xFF));
        displayStr.append(prefixZeros((int) objectGUID[14] & 0xFF));
        displayStr.append(prefixZeros((int) objectGUID[15] & 0xFF));
        return displayStr.toString();
    }
     private static String prefixZeros(int value) {
        if (value <= 0xF) {
            StringBuilder sb = new StringBuilder("0");
            sb.append(Integer.toHexString(value));
            return sb.toString();
        } else {
            return Integer.toHexString(value);
        }
    }

0 个答案:

没有答案
相关问题