Я не понимаю твою проблему. Конечно, вы должны реализовать все возможные конфигурации. Если вы хотите, чтобы клиент (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 варианта. И компания выбирает доступные варианты перед запуском.