2015-10-08 7 views
0

Я пытаюсь настроить окнеРазличающееся_имя_базыполь на моем Spring Ldap источнике контекста, но он продолжает бросать исключение:безопасности LDAP Spring окнеРазличающееся_имя_базыполе

конфиг выглядит следующим образом:

<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"); 
      } 
     } 

я получаю «корень DNs должна быть одинаковой при использовании нескольких URL» ошибки, и я замечаю, что строка токенизировать r tokens по пробелам, так что это chomping мой baseDN и превращение его в отдельный URL-адрес сервера LDAP. Что дает? Что я здесь делаю неправильно?

я получаю один и тот же вопрос (очевидно), если я настраиваю так:

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

ответ

0

Хорошо - так что я не понял, как я могу предоставить поисковую базу для источника контекста безопасности, но делая это:

<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> 

это работает.

Смежные вопросы