Я не понимаю твою проблему. Конечно, вы должны реализовать все возможные конфигурации. Если вы хотите, чтобы клиент (client = customer?) Самостоятельно конфигурировал конфигурацию безопасности, скажите ему переопределить конфигурацию так, как ему нужно. На самом деле вы не знаете о потребностях вашего клиента в будущем, так что вы хотите реализовать?

ли настроить Spring Security таким образом, чтобы он считывал детали конфигурации из внешнего файла и настраивал соответственно.

(Я не собираюсь менять конфигурацию во время выполнения. Я говорю о чтении из файла во время запуска)

Примермой существующий Конфигурация безопасности 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();
        }
    }
}

Как вы можете видеть, я использую несколько конфигураций (посмотрите наOrder() аннотация). То, что я хочу сделать, это решить во время запуска номер и типы конфигурации. Например, первый клиент может захотеть иметь 2 конфига, напримерLdapConfig а такжеSamlConfig, Другие могут хотетьLdapConfig а такжеSqlConfig а третьему может понадобиться 4-5 конфигов. Возможно ли это сделать?

НОТА: Я не использую Spring Boot

РЕДАКТИРОВАТЬ

Резюме, почему я так понял:

Попокупатель Я имею в виду компанию, которая будет покупать мой продукт. И попользователи Я имею в виду реальных конечных пользователей компании, которая купила мой продукт. Поэтому я отправил продукт в 3 компании. Сначала настроим так, чтобыldap auth flow а такжеgoogle-oauth2 поток авторизации, Пользователи этой первой компании будут видеть страницу входа с этими двумя вариантами. Компания 2 теперь может иметьldap auth flow а такжепоток авторизации saml и пользователи этой компании будут видеть эти 2 варианта. И компания выбирает доступные варианты перед запуском.

Ответы на вопрос(3)

Ваш ответ на вопрос