Fornecendo uma maneira de configurar a segurança da primavera?

É possível configurar a segurança da mola de maneira que leia os detalhes da configuração do arquivo externo e configure de acordo.

(Não estou pensando em alterar a configuração no tempo de execução. Estou falando sobre a leitura de um arquivo no momento da inicialização)

Um exemplo demeu existente A configuração de segurança Sporing é:

@EnableWebSecurity
@Configuration
public class SecurityConfig {

    @Bean                                                             
    public UserDetailsService userDetailsService() throws Exception {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withUsername("user").password("userPass").roles("USER").build());
        manager.createUser(User.withUsername("admin").password("adminPass").roles("ADMIN").build());
        return manager;
    }


    @Configuration
    @Order(1)                                                        
    public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {

        @Override       
        public void configure(AuthenticationManagerBuilder auth) 
          throws Exception {            
            auth.inMemoryAuthentication().withUser("user").password("user").roles("USER");
            auth.inMemoryAuthentication().withUser("admin").password("admin").roles("ADMIN");
        }

        protected void configure(HttpSecurity http) throws Exception {
            http
                .antMatcher("/api/v1/**")                               
                .authorizeRequests()
                .antMatchers("/api/v1/**").authenticated()
                    .and()
                .httpBasic();
        }
    }

    @Configuration
    @Order(2)
    public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

        @Override       
        public void configure(AuthenticationManagerBuilder auth) 
          throws Exception {

            auth.inMemoryAuthentication().withUser("user1").password("user").roles("USER");
            auth.inMemoryAuthentication().withUser("admin1").password("admin").roles("ADMIN");
        }

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

Como você pode ver, estou usando várias configurações (vejaOrder() anotação). O que eu quero poder fazer é decidir no momento do número de inicialização e dos tipos de configuração. O primeiro cliente de exemplo pode querer ter 2 configurações, por exemploLdapConfig eSamlConfig. Outro pode quererLdapConfig eSqlConfig e o terceiro pode querer 4-5 configurações. É possível fazer isso?

NOTA: Não estou usando o Spring Boot

EDITAR

Resumo de por que eu quero assim:

Porcliente Quero dizer a empresa que estará comprando meu produto. E porComercial Quero dizer, os usuários finais reais da empresa que comprou meu produto. Então, eu enviei o produto para 3 empresas. Primeiro irá configurá-lo para terfluxo de autenticação LDAP efluxo de autenticação do google-oauth2. Os usuários desta primeira empresa verão uma página de login com essas 2 opções. A empresa 2 agora pode ter umfluxo de autenticação LDAP efluxo de autenticação saml e os usuários dessa empresa verão essas duas opções. E a empresa está selecionando as opções disponíveis antes da inicialização.

questionAnswers(3)

yourAnswerToTheQuestion