Spring Boot redirect на текущую страницу после успешного входа в систему

у меня есть формы входа в модальные окна. После успешного входа пользователь перенаправляется на / страница. Я пытаюсь найти способ остаться на странице контакта или другой странице после входа в систему. Как это сделать? Мой код:

@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("/");
}

5 ответов


вы можете использовать custom AuthenticationSuccessHandler и set useReferer to true.

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

и в configure способ:

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

просто, чтобы обеспечить альтернативное решение:

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

defaultSuccessUrl ярлык для добавления пользовательского SuccessHandler.


вы также можете сделать это в своем AuthenticationSuccessHandler реализация:

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

у меня была странная проблема, которая заставила бы при входе в систему перенаправить пользователя на localhost:8080/js/bootstrap.min.js

если кто-то еще испытывает странное перенаправление при входе в систему, которое, похоже, переопределяет .defaultSuccessUrl(), тогда попробуйте добавить этот код ниже в SecurityConfig:

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

добавлять Resources/static папки antMatchers()


@Jonas все, что вам нужно сделать, это добавить .requestCache () в конце

конфигурация будет выглядеть следующим образом

         .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
        .logout()
            .permitAll()
            .and()
            .requestCache()