2016-08-15 46 views
1

DefaultLdapAuthoritiesPopulator設置搜索範圍「ONE_LEVEL」,但我需要搜索「SUBSCOPE」以獲取用戶所屬組的列表。在配置中自定義LdapAuthoritiesPopulator

我一直在關注「配置」風格的Spring設置(代碼,而不是XML)。雖然有很多關於如何在XML中配置自定義LdapAuthoritiesPopulator的例子,但我仍然困惑於如何在代碼中完成它。

這是我到目前爲止有:

@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @EnableWebSecurity 
    public class SecurityConfig extends WebSecurityConfigurerAdapter { 

     @Autowired 
     public void configure(AuthenticationManagerBuilder auth) throws Exception { 
      auth.ldapAuthentication() 
       .contextSource().url("ldap://ldap.company.org/") 
       .and() 
        .userSearchBase("o=company.org,c=us") 
        .userSearchFilter("(uid={0})") 
        .groupSearchBase("o=company.org,c=us") 
        .groupSearchFilter("(&(objectClass=groupOfUniqueNames)(uniqueMember={0}))"); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.formLogin().and().authorizeRequests() 
      .antMatchers("/api/**").authenticated() 
      .anyRequest().permitAll(); 
    } 
} 

現在缺少的是,我需要可以設置搜索範圍在這個DefaultLdapAuthoritiesPopulator。該類本身公開了一個「setSearchSubtree」方法,但LdapAuthenticationProviderConfigurer沒有提供配置它的方法。

有什麼建議嗎?

+0

您是否找到了解決方案? – Saita

回答

0

您需要添加類似:

final SearchControls searchControls = new SearchControls(); 
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE); 

要你開始搜索之前。 爲什麼它被稱爲「控制」超出了我(一個LDAP傢伙),但這正是Spring所做的。

-jim

+1

我與OP有同樣的問題,但您的答案無濟於事。我們應該如何通過這些配置構建器一直向下傳遞SearchControl? – Saita