Java Spring Security config - plusieurs fournisseurs d'authentification
Il y a plusieurs références de plusieurs fournisseurs d'authentification au printemps de sécurité, mais pas d'exemple en Java config a pu être localisé.
Le lien suivant donne la notation XML:
Plusieurs Fournisseurs d'Authentification au Printemps de Sécurité
Nous avons besoin pour l'authentification via LDAP ou une base de données
Ci-dessous notre exemple de code:
@Configuration
@EnableWebSecurity
public class XSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AuthenticationProvider authenticationProvider;
@Autowired
private AuthenticationProvider authenticationProviderDB;
@Override
@Order(1)
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider);
}
@Order(2)
protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProviderDB);
}
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/scripts/**","/styles/**","/images/**","/error/**");
}
______
@Override
@Order(1)
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/","/logout","/time").permitAll()
.antMatchers("/admin").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/index")
.loginProcessingUrl("/perform_login")
.usernameParameter("email")
.passwordParameter("password")
.failureUrl("/index?failed=true")
.defaultSuccessUrl("/summary",true)
.permitAll()
.and()
.logout().logoutUrl("/logout")
.logoutSuccessUrl("/index?logout=true").permitAll()
.and()
.exceptionHandling().accessDeniedPage("/error403")
.and().authenticationProvider(authenticationProvider);
}
@Order(1)
protected void configureDB(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/","/logout").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/index")
.loginProcessingUrl("/perform_login")
.usernameParameter("email")
.passwordParameter("password")
.failureUrl("/index?failed=true")
.defaultSuccessUrl("/summary",true)
.permitAll()
.authenticationProvider(authenticationProviderDB)
//This line giving compilation error stating authenticationProvider is not available in formloginconfigurer
.and()
.logout().logoutUrl("/logout")
.logoutSuccessUrl("/index?logout=true").permitAll()
.and()
.exceptionHandling().accessDeniedPage("/error403");
}
}
Appelez simplement
authenticationProvider
plusieurs fois avec des AuthenticationProvider
instances. Les deux seront enregistrés et consultés dans l'ordre spécifié.OriginalL'auteur Matt Jerry | 2016-02-12
Vous devez vous connecter pour publier un commentaire.
Peut-être ce sera vous aider à :-
Comment est-ce de travailler sans ces références
ici que
.authenticated()
d'authentifier toute demande qui vous avez trouvé deantMatcher
puis il va définir l'état dans son successHandlerJ'ai essayé avec ce code et il fonctionne uniquement pour ldap ou une base de données et non pas les deux. Il n'y a pas d'exemples dans spring java config qui parlent plusieurs mécanismes d'authentification et donc difficile de procéder
Alors pourquoi vous n'avez pas maintenir DB configuration et Mvc configuration séparément. dans quelque chose comme DatabaseConfiguration classe et MvcConfiguration Classe
OriginalL'auteur ojus kulkarni
Dans Printemps de Démarrage cela a fonctionné pour moi:
Chaque fournisseur d'Authentification est testé dans l'ordre. Si on passe, puis ses fournisseurs d'Authentification suivants sont ignorés
auth.userDetailsService(userDetailsService)...
alors:
auth.ldapAuthentication()....
OriginalL'auteur Ryan Augustine
C'est une configuration qui permet de configurer plusieurs fournisseurs d'authentification en java config.
Merci beaucoup ojus pour vos entrées. Il a aidé à mettre le doigt sur le problème.
La clé est d'avoir
Code complet ci-dessous
OriginalL'auteur Matt Jerry