web-dev-qa-db-fra.com

Spring Boot redirige vers la page en cours après une connexion réussie

J'ai des formulaires de connexion dans des fenêtres modales. Une fois la connexion établie, l’utilisateur est redirigé vers la page /. J'essaie de trouver une méthode pour rester sur la page de contact ou une autre page après la connexion. Comment faire ça? Mon code est: 

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .antMatchers("/css/**","/js/**","/fonts/**","/images/**","/home","/","/kontakt").permitAll()
            .antMatchers("/userlist").hasRole("ADMIN")
            .anyRequest().authenticated();
    http
        .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
        .logout()
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .logoutSuccessUrl("/");
}
10
set4812

Vous pouvez utiliser custom AuthenticationSuccessHandler et définir useReferer à true.

@Bean
public AuthenticationSuccessHandler successHandler() {
    SimpleUrlAuthenticationSuccessHandler handler = new SimpleUrlAuthenticationSuccessHandler();
    handler.setUseReferer(true);
    return handler;
}

Et dans votre méthode configure:

http
    .formLogin()
        .loginPage("/login")
        .successHandler(successHandler())
        .permitAll()
        .and()
16

Juste pour fournir une solution alternative:

formLogin()
    .loginPage("/login")
    .defaultSuccessUrl("/")

defaultSuccessUrl est un raccourci pour ajouter la SuccessHandler personnalisée.

10
Jonas

Vous pouvez également le faire dans votre implémentation AuthenticationSuccessHandler:

@Override
public void onAuthenticationSuccess(HttpServletRequest request, 
HttpServletResponse response, Authentication authentication) throws 
IOException, ServletException 
{
    //Do your logic;
    response.sendRedirect(request.getHeader("referer");
}
3
Augustin Ghauratto

J'ai eu un problème étrange qui aurait provoqué la redirection de l'utilisateur sur localhost:8080/js/bootstrap.min.js lors de la connexion 

Si quelqu'un d'autre rencontre une redirection étrange lors de la connexion, qui semble remplacer la .defaultSuccessUrl(), essayez d'ajouter ce code ci-dessous dans SecurityConfig

@Override
public void configure(WebSecurity security){
    security.ignoring().antMatchers("/css/**","/images/**","/js/**");
}

Ajoutez tous vos dossiers Resources/static à la antMatchers()

0
benscabbia