Я пытаюсь использовать форму 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() );
}
Первый запрос, похоже, недаже добраться до контроллера.Как я могу избежать отправки второго запроса?