Authentification multiple url de login
Bonjour,
Je suis actuellement entrain de travailler sur la partie authentification d'une application web utilisant Spring Security. J'essaye d'ajouter une autre url de connexion pour que le web services soit utiliser au mieux par une application mobiles (c'est a dire sans retour de code html par exemple et donc le customize). Cependant je souhaite garder la première url intact pour la connexion a l'application via un navigateur web. J'ai donc fait ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MultiHttpSecurityConfig {
@Configuration
@Order(1)
public static class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomAuthenticationProvider customAuthenticationProvider;
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(customAuthenticationProvider);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/chat/**")
.permitAll()
.antMatchers("/service/boite_idee_note/**", "/service/atelier_vote/**", "/service/equipe/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_SUPER_ADMIN')")
.antMatchers("/", "/Repository/**", "/uploadFile", "/uploadPdf", "/uploadLogo","/upload_nouveau_venu", "/service/**").access("hasRole('ROLE_USER') or hasRole('ROLE_ADMIN') or hasRole('ROLE_SUPER_ADMIN')")
.and().formLogin().loginPage("/login")
.and().addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class).csrf()
.ignoringAntMatchers("/chat/**")
.csrfTokenRepository(this.csrfTokenRepository());
}
/**
* @return
*/
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
}
@Configuration
@Order(2)
public static class WebSecurityConfigAppMobile extends WebSecurityConfigurerAdapter {
@Autowired
private CustomAuthenticationProvider customAuthenticationProvider;
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(customAuthenticationProvider);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin()
.loginPage("/loginMobile")
.and().logout()
.and().addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class).csrf()
.csrfTokenRepository(this.csrfTokenRepository());
}
/**
* @return
*/
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
}
} |
Le problème c'est lorsque je fait une requête sur l'url /loginMobile, je reçoit une erreur 404 de la part du serveur. J'ai l'impression que le second adaptater n'est pas pris en compte.
Je voudrais donc savoir si je m'y prends de la bonne façon.
Merci pour votre aide :D