1

Spring LDAP コンテキスト ソースで baseDN を構成しようとしていますが、例外がスローされ続けます。

構成は次のとおりです。

<beans:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
        <beans:constructor-arg index="0" value="${ldap_server}"/>
        <beans:constructor-arg index="1" value="${ldap_searchbase}"/>
    </beans:bean>

私のldap_searchbaseにはスペースがあり、問題を引き起こすSpringコードを見てきました:

public DefaultSpringSecurityContextSource(String providerUrl) {
        Assert.hasLength(providerUrl, "An LDAP connection URL must be supplied.");

        StringTokenizer st = new StringTokenizer(providerUrl);

        ArrayList<String> urls = new ArrayList<String>();

        // Work out rootDn from the first URL and check that the other URLs (if any) match
        while (st.hasMoreTokens()) {
            String url = st.nextToken();
            String urlRootDn = LdapUtils.parseRootDnFromUrl(url);

            urls.add(url.substring(0, url.lastIndexOf(urlRootDn)));

            logger.info(" URL '" + url + "', root DN is '" + urlRootDn + "'");

            if (rootDn == null) {
                rootDn = urlRootDn;
            } else if (!rootDn.equals(urlRootDn)) {
                throw new IllegalArgumentException("Root DNs must be the same when using multiple URLs");
            }
        }

「複数の URL を使用する場合、ルート DN は同じである必要があります」というエラーが表示されます。文字列トークナイザーが空白でトークンを作成しているため、baseDN がむちゃくちゃになり、別の LDAP サーバー URL になっていることに気付きました。何を与える?ここで何が間違っていますか?

そのように構成すると、(明らかに) 同じ問題が発生します。

<beans:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
        <beans:constructor-arg index="0" value="${ldap_server}/${ldap_searchbase}"/>
    </beans:bean>
4

2 に答える 2

1

わかりました - セキュリティ コンテキスト ソースに検索ベースを提供する方法がわかりませんが、次のようにします。

<beans:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
        <beans:constructor-arg index="0" value="${ldap_server}"/>
    </beans:bean>

と:

<beans:bean id="ldapUserSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
        <beans:constructor-arg index="0" value="${ldap_searchbase}"/>
        <beans:constructor-arg index="1" value="${ldap_auth_search_filter}"/>
        <beans:constructor-arg index="2" ref="contextSource" />
    </beans:bean>

できます。

于 2015-10-09T01:04:55.270 に答える