Spring Security: пользовательский LdapAuthenticationProvider

#java #spring #spring-boot #spring-security

#java #spring #весенняя загрузка #spring-безопасность

Вопрос:

Мне нужно использовать пользовательский LdapAuthenticationProvider, только с одним незначительным изменением, чтобы выполнить аутентификацию, должно быть выполнено определенное предварительное условие.

Чего я хочу в основном:

 @Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
    if (!precondition) {
        throw new DisabledException("");
    }

    return super.authenticate(authentication);
}
  

Мой WebSecurityConfigurerAdapter:

 @Autowired
protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth
            .userDetailsService(userDetailsService)
            .passwordEncoder(encoder);

    if (ldapSecurityConfig.isLdapEnabled()) {
        auth
                .ldapAuthentication()
                .contextSource(ldapContextSource)
                .userSearchFilter(ldapSecurityConfig.getUserSearchFilter())
                .ldapAuthoritiesPopulator(ldapAuthoritiesPopulator)
                .userDetailsContextMapper(userDetailsContextMapper);
    }
}
  

Проблема в том, что строка

 auth.ldapAuthentication()
  

создает объект LdapAuthenticationProviderConfigurer, а его метод сборки создает экземпляр объекта LdapAuthenticationProvider:

 LdapAuthenticationProvider ldapAuthenticationProvider = new LdapAuthenticationProvider(ldapAuthenticator, authoritiesPopulator);
  

Похоже, у меня нет контроля над тем, какой LdapAuthenticationProvider будет использоваться в конце.

В качестве обходного пути я мог бы проверить предварительное условие в моем объекте UserDetailsContextMapper и выдать исключение, если оно не выполнено, но это не оптимально, поскольку в этом случае будет запрошен сервер LDAP, даже если это не требуется.

Мой вопрос в том, как я могу заставить использовать моего пользовательского провайдера или есть какой-либо другой «простой» способ добиться желаемого поведения?

Комментарии:

1. Вы нашли решение?