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.