Я подготовил и расширил существующий пример пружины , который работает нормально.Вы можете просто войти в систему с помощью «user» и «password», и после этого вы будете перенаправлены в user / index.
Используя этот контроллер
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
@GetMapping("/login-error")
public String loginError(Model model) {
model.addAttribute("loginError", true);
return "login";
}
}
Но как только я запускаю тестовый пример, которыйпри использовании WebClient тот же логин вызывает исключение:
com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: 405 Request method 'POST' not supported for http://localhost:8080/login
, что странно, потому что само приложение работает просто отлично.
РЕДАКТИРОВАТЬ: Это метод тестирования, вызывающий проблему
@And("^the user clicks the login button$")
public void theUserClicksTheLoginButton() throws IOException {
page = page.getElementById("login").click();
}
Я не ожидал, что метод click в WebClient использует POST вместо реального выполнения поля ввода в html.
<form th:action="@{/login}" method="post">
<label for="username">Username</label>:
<input type="text" id="username" name="username" autofocus="autofocus" /> <br />
<label for="password">Password</label>:
<input type="password" id="password" name="password" /> <br />
<input type="submit" id="login" value="Log in" />
</form>
РЕДАКТИРОВАТЬ 2: Хорошо, может быть, я должен уточнить мой вопроснемного.Я знаю, что вход в систему должен осуществляться через POST, и мой @Controller
предоставляет только @GetMapping
, но это нормально, потому что Spring Security обрабатывает запросы POST, как я вижу в заголовке при входе в систему:
У меня вопрос , почему он работает нормально при работе приложения , и , почему при использовании WebClient * 1031 не происходит такое же поведение?*.