Je travaille sur une couche de sécurité de démarrage du printemps pour authentifier et autoriser le user.Now, je voudrais faire quelques exemple d'application utilisant configuration.I de sécurité multi http ont le scénario comme il y aura deux pages de connexion avec différentes applications d'URL ("/ managementLogin", "/ othersLogin").Comment configurer plusieurs HttpSecurity avec UserDetailsService en utilisant la sécurité de démarrage de printemps?
Je peux comprendre comment configurer les configurations multi httpsecurity mais j'ai besoin de valider les utilisateurs de deux tables.Si les utilisateurs de gestion connecté, je dois valider l'utilisateur de la table de gestion par DAO couche UserDetailsService
sinon si d'autres utilisateurs sont connectés i besoin de valider à partir de la table other_users.
Quelqu'un pourrait me aider à savoir comment configurer la configuration multi http et dao couche à l'aide UserDetailsService
avec la sécurité de démarrage du printemps?
Voici mon extrait de code de base,
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Autowired
@Qualifier("userDetailsService")
UserDetailsService userDetailsService;
@Autowired
private RESTAuthenticationEntryPoint authenticationEntryPoint;
@Autowired
private RESTAuthenticationFailureHandler authenticationFailureHandler;
@Autowired
private RESTAuthenticationSuccessHandler authenticationSuccessHandler;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// for testing authentication purpose using inMemory db
/*
* auth.inMemoryAuthentication().withUser("user").password("user").roles
* ("USER").and().withUser("admin") .password("admin").roles("ADMIN");
*/
// Dao based authentication
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/", "/home").permitAll();
http.authorizeRequests().antMatchers("/rest/**").authenticated();
http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint);
http.formLogin().successHandler(authenticationSuccessHandler);
http.formLogin().failureHandler(authenticationFailureHandler);
http.logout().logoutSuccessUrl("/");
// CSRF tokens handling
http.addFilterAfter(new CsrfTokenResponseHeaderBindingFilter(), CsrfFilter.class);
}
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/registerUser","/register.html");
}
@Bean
public PasswordEncoder passwordEncoder() {
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
}
TIA ..,
Si j'ai bien compris, vous ne voulez pas plusieurs userDetailsServices. Au lieu de cela, vous voulez implémenter loadByUsername dans votre userDetailsService pour rechercher le nom d'utilisateur donné dans les deux tableaux, n'est-ce pas? Ou certains points de terminaison ne sont-ils autorisés que pour les utilisateurs de l'une de ces tables? –
Pourquoi avez-vous besoin de deux points de terminaison de connexion distincts? – gabrielgiussi
@YannicKlem La raison pour laquelle deux tables de consultation distinctes pourraient être requises pourrait être d'éviter un conflit éventuel d'ID de connexion si son unicité entre les deux types d'utilisateurs n'est pas garantie. Bien qu'une chance de correspondance de mot de passe accidentelle entre les deux tables pour le même identifiant de connexion soit mince, le risque est toujours là. – RZet