Отправка формы отправляет нежелательный запрос GET - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь использовать форму HTML для отправки данных на мой сервер Spring / Thymeleaf.Когда я использую метод POST для отправки, второй запрос отправляется с тем же URL-адресом, но с дополнительным параметром запроса «? Error» и методом GET.Этот последующий запрос вызывает ошибки, поскольку он не несет информацию, которая присутствовала в теле запроса POST, и я должен как-то обработать этот второй запрос.В моем окне инспектора написано, что второй запрос каким-то образом был инициирован первым.

После изменения метода на GET запрос работает отлично.Однако это решение не работает для меня, потому что я использую форму для отправки данных пароля.

Вот форма, которая вызывает проблемы (классы и т. Д. Пропущены):

<form action="/login" method="POST">
    <div>
        <div>
            <span><i></i></span>
        </div>
        <input name="username" type="text" placeholder="username">
    </div>
    <div>
        <div>
            <span><i></i></span>
        </div>
        <input name="password" type="password" placeholder="password">
    </div>
    <input type="hidden" th:value="${_csrf.token}" th:name="${_csrf.parameterName}">
    <div>
        <input type="submit" value="Login" name="button">
    </div>
</form>

Вот контроллер, который обрабатывает все запросы к / login (это еще не закончено, но, возможно, я здесь упускаю что-то важное):

@Controller()
public class LoginController {

    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String doGet() {
        System.out.println("Login page accessed");
        return "login";
    }

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String doPost() {
        System.out.println("Login attempted");
        return "redirect:home";
    }
}

Ожидаемый вывод при отправке формы: "Попытка входа в систему », но единственным результатом является« Доступ к странице входа ».

Вот метод настройки безопасности, который явно определяет некоторые дополнительные функции для этой конечной точки

@Override
    protected void configure(HttpSecurity http) throws Exception {      
        http
            .authorizeRequests()
            .antMatchers("/about", "/login", "/css/**", "/js/**", "/assets/**" ).permitAll()        
            .anyRequest().permitAll()
        .and()
            .csrf()
        .and()
            .formLogin()
                .loginPage("/login")
                .loginProcessingUrl("/login")
                .defaultSuccessUrl("/home")
                .usernameParameter("username")
                .passwordParameter("password")
        .and()
            .logout()
                .logoutUrl("/logout")
                .addLogoutHandler( new CookieClearingLogoutHandler() );
    }

Первый запрос, похоже, недаже добраться до контроллера.Как я могу избежать отправки второго запроса?

1 Ответ

0 голосов
/ 10 мая 2019

Дополнительный вызов /login?error инициируется Spring Security при каждом сбое входа в систему.Это регистрационная форма по умолчанию authenticationFailureUrl.

Spring Security имеет обработчик /login POST по умолчанию, и ваш код, скорее всего, конфликтует с ним (т. Е. Данные публикации вашей формы отправляются вместо вашего обработчика Spring Security)., затем не проходит аутентификацию и вызывает перенаправление на ошибку).

Возможно, вы захотите проверить DaoAuthenticationProvider и CustomAuthenticationProvider.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...