Весенняя загрузка и Spring Security, разные формы входа для использования разных обработчиков успеха

#spring #spring-boot #spring-mvc #spring-security

#spring #весенняя загрузка #spring-mvc #spring-безопасность

Вопрос:

У меня есть сайт spring boot / mvc, использующий spring security. Я должен использовать способы входа в систему, в панели навигации, присутствующей на каждой странице, и на странице входа, на которую вы перенаправляетесь при попытке доступа к ограниченному ресурсу.

Для панели навигации я бы хотел, чтобы пользователь оставался на странице после успешного входа в систему, для страницы входа я бы хотел, чтобы пользователь перенаправлялся на ресурс, к которому он пытался получить первоначальный доступ после входа в систему.

Я могу выполнять каждую функциональность по отдельности, первый вариант использования обрабатывается:

 SimpleUrlAuthenticationSuccessHandler handler = new SimpleUrlAuthenticationSuccessHandler();

    handler.setUseReferer(true);
  

Второй случай — это функциональность по умолчанию.
Но я не смог заставить их работать оба.

У кого-нибудь есть идеи о том, как этого добиться?

Ответ №1:

Вы можете настроить каждую страницу входа с помощью другого обработчика AuthenticationSuccessHandler, как описано здесьhttps://www.baeldung.com/spring_redirect_after_login

Нравится:

     @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/anonymous*").anonymous()
                .antMatchers("/login*").permitAll()
                .anyRequest().authenticated()

                .and()
                .formLogin()
                .loginPage("/login.html")
                .loginProcessingUrl("/login")
                .successHandler(myAuthenticationSuccessHandler())

                .and()
                .formLogin()
                .loginPage("/login2.html")
                .loginProcessingUrl("/login2")
                .successHandler(mySecondAuthenticationSuccessHandler())
        // ...
    }
  

Комментарии:

1. Допустим, у меня была страница входа в систему «/login» и «/ home», я хотел, чтобы «/ home» использовал обработчик успеха клиента, а «/ login» — функциональность по умолчанию. Я бы сделал and() .formLogin() .loginPage("/login.html") .loginProcessingUrl("/login") .and() .formLogin() .loginPage("/home") .loginProcessingUrl("/home") .successHandler(myCustomSuccessHandler()); , потому что кажется, что пользовательский обработчик успеха используется для всего