从Java中的String解析LDAP属性

时间:2013-11-06 19:24:21

标签: java ldap jndi

有没有办法解析String的属性?例如,如果我有以下内容:

CN=Doe, John: Markets (LDN),OU=Users,DC=FOOCORP,DC=COM

并希望将其转换为AttributesAttribute - s,是否有一个可以使用的实用程序类可以执行所有正确的转义,或者我应该只是执行一些实现我自己的?

我有以下代码:

    String cnBase = "CN=Doe\\, John: Markets (LDN),OU=Users,DC=FOOCORP,DC=COM";

    StringTokenizer st = new StringTokenizer(cnBase, "=");

    Attributes attributes = new BasicAttributes();

    String attributeId = null;
    String attributeValue = null;
    String previousToken = null;

    while (st.hasMoreTokens())
    {
        String token = st.nextToken();

        if (previousToken == null && attributeId == null)
        {
            // Get the attribute's id
            attributeId = token;
            continue;
        }

        if (attributeId != null)
        {
            if (token.contains(","))
            {
                attributeValue = token.substring(0, token.lastIndexOf(","));
            }
            else
            {
                attributeValue = token;
            }
        }

        if (attributeId != null && attributeValue != null)
        {
            // Add a new Attribute to the attributes object
            Attribute attribute = new BasicAttribute(attributeId, attributeValue);
            attributes.put(attribute);

            System.out.println(attribute.toString());

            attributeId = token.substring(token.lastIndexOf(",") + 1, token.length());
            attributeValue = null;
        }

        previousToken = token;
    }

我认为可以用更聪明的方式重写。

1 个答案:

答案 0 :(得分:2)

JNDI有一个名为LdapName(错误名称)的类,它代表专有名称。它基于过时的RFC,但可能会令人满意。

另见