Spring 在配置中自定义LdapAuthoritiesPopulator

Spring 在配置中自定义LdapAuthoritiesPopulator,spring,spring-security,ldap,spring-security-ldap,Spring,Spring Security,Ldap,Spring Security Ldap,DefaultLdapAuthoritiesPopulator将搜索范围设置为“一级”,但我需要搜索“子范围”,以获取用户所属组的列表 我一直遵循“配置”风格的Spring设置(代码,而不是XML)。虽然有很多关于如何在XML中配置自定义LdapAuthoritiesPopulator的示例,但我还是停留在代码中 以下是我目前掌握的情况: @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAda

DefaultLdapAuthoritiesPopulator将搜索范围设置为“一级”,但我需要搜索“子范围”,以获取用户所属组的列表

我一直遵循“配置”风格的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没有提供配置该方法的方法


有什么建议吗?

您需要添加以下内容:

final SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
在您开始搜索之前,请先执行以下操作。 为什么它被称为“控件”是我(LDAP的人)无法理解的,但Spring就是这么做的


-jim

解决方案是在LdapAuthoritiesPopulator中设置此属性,并将其传递给LdapAuthenticationProvider

请参阅中的示例1:

@豆子 公共LdapAuthoritiesPopulator authoritiesPopulator(){


我遇到了与OP相同的问题,但您的回答没有帮助。我们应该如何将SearchControl一直传递到这些配置生成器?您找到解决方案了吗?示例不完整,因为OP使用生成器变量进行配置,不允许访问
contextSource()
    DefaultLdapAuthoritiesPopulator populator = new DefaultLdapAuthoritiesPopulator(
            contextSource(),
            groupSearchBase);

    populator.setGroupSearchFilter("(uniqueMember={0})");
    populator.setGroupRoleAttribute("cn");
    **populator.setSearchSubtree(true);**
    populator.setRolePrefix("");

    return populator;
}