¿Proporciona forma de configurar la seguridad de primavera?
¿Es posible configurar Spring Security de manera que lea los detalles de configuración del archivo externo y los configure en consecuencia?
(No estoy considerando cambiar la configuración en tiempo de ejecución. Estoy hablando de leer un archivo en el momento del inicio)
Un ejemplo demi existente La configuración de seguridad de Sporing es:
@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 puede ver, estoy usando múltiples configuraciones (eche un vistazo aOrder()
anotación). Lo que quiero poder hacer es decidir en el momento del número de inicio y los tipos de configuración. El primer cliente de ejemplo puede querer tener 2 configuraciones, p.LdapConfig
ySamlConfig
. Otro puede quererLdapConfig
ySqlConfig
y el tercero puede querer 4-5 configuraciones. ¿Es posible hacer eso?
NOTA: No estoy usando Spring Boot
EDITAR
Resumen de por qué lo quiero de esta manera:
Porcliente Me refiero a la compañía que comprará mi producto. Y porlos usuarios Me refiero a los usuarios finales reales de la empresa que compró mi producto. Así que envié el producto a 3 empresas. Primero lo configuraremos para tenerflujo de autenticación ldap yflujo de autenticación google-oauth2. Los usuarios de esta primera compañía verán una página de inicio de sesión con estas 2 opciones. La empresa 2 ahora podría tener unflujo de autenticación ldap yflujo de autenticación saml y los usuarios de esa compañía verán esas 2 opciones. Y la compañía está seleccionando las opciones disponibles antes del inicio.